在Android中,在所有子Activity中显示一个父Activity的视图

3

我有一个继承自Activity的BaseActivity,其中包含一个RecyclerView。

我希望所有的Activity都能继承这个RecyclerView。因此,每个Activity都继承了BaseActivity。

但是,如果在Child Activity中使用不同的XML布局,通过setContentView方法设置布局后,来自BaseActivity的RecyclerView将不可见。

BaseActivity.java

public class BaseActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base);

        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);


        baseRecyclerModel itemsData[] = { new baseRecyclerModel("Help",R.drawable.help),
                new baseRecyclerModel("Delete",R.drawable.delete),
                new baseRecyclerModel("Cloud",R.drawable.cloud)};


        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        baseRecyclerAdapter mAdapter = new   baseRecyclerAdapter(itemsData);

        recyclerView.setAdapter(mAdapter);

        recyclerView.setItemAnimator(new DefaultItemAnimator());
    }

ChildActivity1.java

public class ChildActivity1 extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_get_mobile_number);



    }

可能的解决方法或解决方案是什么?
2个回答

2

在你的BaseActivity.java中不需要调用setContentView()函数。可以将初始化RecyclerView的功能单独写成一个函数放在BaseActivity.java文件中(例如create()函数)。在ChildActivity1.java中,调用setContentView()create()函数。然后在activity_get_mobile_number.xml中引入activity_base.xml文件。

public class BaseActivity extends Activity {

    @Override
    protected void create() {
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

        baseRecyclerModel itemsData[] = { new baseRecyclerModel("Help",R.drawable.help),
            new baseRecyclerModel("Delete",R.drawable.delete),
            new baseRecyclerModel("Cloud",R.drawable.cloud)};


        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        baseRecyclerAdapter mAdapter = new   baseRecyclerAdapter(itemsData);

        recyclerView.setAdapter(mAdapter);

        recyclerView.setItemAnimator(new DefaultItemAnimator());
    }
}

public class ChildActivity1 extends BaseActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_get_mobile_number);
        create();
    }
}

1
通过在ChildActivity中调用setContentView,您实际上用新的布局替换了BaseActivity的布局。为了在ChildActivity中使用RecyclerView,您需要将它包含在activity_get_mobile_number.xml中。
请参阅this page关于includemerge标签的内容。
想法是有一个单独的通用布局文件,您将在BaseActivityChildActivity布局中都包含它。然后,将所有代码移到一个方法中,并在子类中调用它:
public class BaseActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base);
        setupRecyclerView();
    }

    protected void setupRecyclerView(){
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

        baseRecyclerModel itemsData[] = { new baseRecyclerModel("Help",R.drawable.help),
            new baseRecyclerModel("Delete",R.drawable.delete),
            new baseRecyclerModel("Cloud",R.drawable.cloud)};

        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        baseRecyclerAdapter mAdapter = new   baseRecyclerAdapter(itemsData);

        recyclerView.setAdapter(mAdapter);

        recyclerView.setItemAnimator(new DefaultItemAnimator());
    }
}


public class ChildActivity1 extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_get_mobile_number);
        super.setupRecyclerView(),
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接