1,为了代码比较优雅,所以我写了一个BaseActivity如下:
public abstract class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
}
/**
* 初始化视图控件
*/
public abstract void initView();
/**
* 设置数据
*/
public abstract void setDate();
}
2.我发现我们在实现这个抽象类时,要在 onCreate(Bundle savedInstanceState){
}中写initView();而且都是重复的,有没有办法不写initView,也可以初始化initView里的设置,让继承BaseActivity不用在onCreate()中initView()
BaseActivity中覆盖setContentView()方法,再里面调用initView()
@Override
public void setContentView(int layoutResID)
{
// TODO Auto-generated method stub
super.setContentView(layoutResID);
initViews();
}
抽象类这么写
public abstract class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
initView();//这里加上,子类就不用写了
}
/**
* 初始化视图控件
*/
public abstract void initView();
/**
* 设置数据
*/
public abstract void setDate();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
initView();
}
public abstract void initView();
public abstract void setData();
把initview方法写进抽象类的oncreate里面
楼上给的意见是正解,我就是这么做的,再BaseActivity的onCreate方法中调用写的抽象类,在继承了BaseActivity之后,就不用再重新调用
该方法,只需重写其内容就可以了。
说实话,我觉得基类还是控制有哪些方法,和把基本,是基本调用做了,这些逻辑还是放在子类好,因为时间一长或者别人来看,就容易把你的基类忽略,导致不清楚整个逻辑。这种方法我个人意见少用,我就遇到过一些要在initview前做的操作。
initView()写在oncreate里面是不行的,因为initView的操作必须要写在setcontentView之后,不然后果很严重
先要加载view,才能初始化控件。
重写覆盖super.setContentView( );将initView( )集成到子activity的setContentView( )方法中。
弱弱的说一句 setDate 是设置日期。。。。。。。。。