在同一个项目当中,很多的页面都是类似的,可以把这些相同的内容提取出来做成一个父类,
然后不同的页面去继承父类,只需要对不同的内容进行修改就可以了。
以下是我的Baseactivity的类。
首先来看一下BaseActivity的布局,如下图所示
红色部分是自定义的TitleBar,如果不清楚,可以参考我的博客 :TitleBar
蓝色部分是FrameLayout容器,用于填充各个页面不同的内容。
XML布局文件如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/backgroundColor"> <date.hb.com.wdiget.TitleBar android:id="@+id/titlebar" android:layout_width="match_parent" android:layout_height="wrap_content"/> <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent"> </FrameLayout> </LinearLayout>
BaseActivity的源码如下:
public abstract class BaseActivity extends AppCompatActivity {
protected TitleBarI titlebar;
private FrameLayout container;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
onInitView(savedInstanceState);
onSetEvent();
onInitData();
}
public void setContentViewWithActionBar(int layoutResID){
setContentView(R.layout.base_activity);
titlebar = (TitleBarI) findViewById(R.id.titlebar);
container = (FrameLayout) findViewById(R.id.container);
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(layoutResID,container,true);
}
public TitleBarI getTitlebar(){
return this.titlebar;
}
protected abstract void onInitView(Bundle args0);
protected abstract void onSetEvent();
protected abstract void onInitData();
}
BaseActivity是一个抽象类,包含三个抽象函数:
onInitView(Bundle args0)初始化界面,onSetEvent()设置事件,onInitData()初始化数据。
setContentViewWithActionBar(int layoutResID)函数就是将子页面填充进container当中。
举例:
TestActivity界面只包含两个Button,布局文件很简单,这里就不写了。
让TestActivity继承BaseActivity,具体代码如下:
public class TestActivity extends BaseActivity implements View.OnClickListener{
private Button button1;
private Button button2;
@Override
protected void onInitView(Bundle args0) {
this.setContentViewWithActionBar(R.layout.test_activity);
//设置title
this.titlebar.setLeftBack();
this.titlebar.setTitle("标题");
this.titlebar.setRightVisible(false);
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
}
@Override
protected void onSetEvent() {
button1.setOnClickListener(this);
button2.setOnClickListener(this);
}
@Override
protected void onInitData() {
}
@Override
public void onClick(View v) {
if(v==button1){
Toast.makeText(this,"button1",Toast.LENGTH_SHORT).show();
}else if(v==button2){
Toast.makeText(this,"button2",Toast.LENGTH_SHORT).show();
}
}
}
这样TestActivity的界面就变成了如下图所示,同时可以在onSetEvent()函数里面给TitleBar加上响应事件。