BaseActivity

来源:互联网 发布:北京软件行业协会 编辑:程序博客网 时间:2024/05/16 08:59

在同一个项目当中,很多的页面都是类似的,可以把这些相同的内容提取出来做成一个父类,

然后不同的页面去继承父类,只需要对不同的内容进行修改就可以了。

以下是我的Baseactivity的类。

首先来看一下BaseActivity的布局,如下图所示

1

红色部分是自定义的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,布局文件很简单,这里就不写了。

3

让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加上响应事件。

2

0 0