问题描述
- Android的Java问题如何实现这样的需求
-
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里面
解决方案五:
你把initView方法写在onCreate里面就OK 了。~~~~
解决方案六:
楼上给的意见是正解,我就是这么做的,再BaseActivity的onCreate方法中调用写的抽象类,在继承了BaseActivity之后,就不用再重新调用
该方法,只需重写其内容就可以了。
解决方案七:
说实话,我觉得基类还是控制有哪些方法,和把基本,是基本调用做了,这些逻辑还是放在子类好,因为时间一长或者别人来看,就容易把你的基类忽略,导致不清楚整个逻辑。这种方法我个人意见少用,我就遇到过一些要在initview前做的操作。
解决方案八:
initView()写在oncreate里面是不行的,因为initView的操作必须要写在setcontentView之后,不然后果很严重
解决方案九:
initView()写在oncreate里面是不行的,因为initView的操作必须要写在setcontentView之后,不然后果很严重
解决方案十:
initView()写在oncreate里面是不行的,因为initView的操作必须要写在setcontentView之后,不然后果很严重