*
一.安卓布局加载之使用模版方法设计模式进行布局加载
Android开发中一般我们进行一个activity页面布局加载是在活动的生命周期函数onCreate()方法中进行。代码如下:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
通常我们的思路就是创建一个activity就重写他的onCreate()方法,虽然这种方式能实现但是对于一个稍有经验的安卓开发工程师来说做法有点low,而且不符合Java开发的宗旨之一——消除冗余代码。故今天本文就介绍利用Java模版方法的设计模式来提升代码的逼格。
- 首先新建一个基类BaseActivity并继承Activity,重写onCreate()方法加载父布局,代码如下:
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
}
布局文件代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ViewStub
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
这里使用到了一个控件ViewStub,就是利用该控件实现布局的加载,详情看后面。
2. 在BaseActivity中利用findViewById获取到ViewStub空间的实例
3. 在BaseActivity中申明一个抽象方法:
public abstract int getlayoutResourceId();
用于返回布局文件的id ,返回值是int类型,并将BaseActivity申明为抽象类
4.在BaseActivity的onCreate()方法中给ViewStub控件设置布局文件并将布局inflate出来,代码如下:
viewStub.setLayoutResource(getlayoutResourceId);
viewStub.inflate()
5.之后任何一个的子Activity只要继承父布局,不需要重写onCreate()方法只需要在子Activity中重写完父类的抽象方法,在该方法中返回子Activity的布局文件ID即可,即
public int getlayoutResourceId() {
return R.layout.activity_main;
}