与android.app.Activity的组合

Ray*_*non 3 inheritance android composition android-activity

智慧的源头"有效的Java第二"说"赞成组合而不是继承"(第16项).现在谈到Android活动时,很容易从一个扩展,但是你打破了封装,代码可能会在超类被修改时中断.我试着写作.以下是组件Activity的代码:

public class SimpleActivity extends Activity{
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView textview = new TextView(this);
        textview.setText("This is the Artists tab");
        setContentView(textview);
    }   
}
Run Code Online (Sandbox Code Playgroud)

这是作文.对于每个Activity的生命周期方法,我调用了forward方法.

public class ComposedActivity extends Activity {
    private SimpleActivity act;
    public ComposedActivity(){
        act = new SimpleActivity();
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        act.onCreate(savedInstanceState);
    }   
}
Run Code Online (Sandbox Code Playgroud)

但是应用程序不断崩溃:java.lang.NullPointerException.我究竟做错了什么 ?只是出于好奇而问.您建议在没有继承的情况下扩展活动?

Nik*_*kov 6

你不可能在另一个活动中有一个活动.如果您想使用Android组件的组合,请查看片段.

只需将逻辑分解为非Android组件的普通Java类(POJO),就可以在不使用片段的情况下使用组合.如果他们需要访问活动,您可以在构造函数中传递对目标活动的引用.或者更好的是,让你的活动实现一些界面让他们持有对它的引用,而不是具体的活动.