BaseActivity

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

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

以下是我的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

posted @ 2017-03-09 15:22  黄大仙爱编程  阅读(179)  评论(0编辑  收藏  举报