我是Android开发的新手,可能这个问题有一个简单的答案,我无法弄清。
我目前想在我的应用的几乎所有活动中使用工具栏。我创建了一个包含所有项目侦听器的基本活动,以及一个用于设置工具栏(setSupportActionBar)
的方法,以及仅具有工具栏及其设置的XML。仅此部分即可正常工作。
现在,当我想要任何活动来扩展此基本活动时,我的问题就来了:
非常感谢您的帮助!
答案 0 :(得分:0)
我必须在基本活动和子活动中都设置setContentView吗?
->不,您不必都设置setContentView。仅在儿童活动中设置即可。
如果我在onCreate方法的基础活动中设置工具栏, 当我在调用后在子活动中设置ContentView时 super.onCreate会被覆盖。现在唯一起作用的是 在子级中调用super.onCreate,然后 setContentView(childLayout),然后调用 设置工具栏的baseActivity。我觉得这有点怪 并且应该有更好的方法。
->在要使用的活动中包括工具栏布局。如果要在每个活动中使用,则在每个xml中添加。
我是否必须手动将工具栏添加到每个孩子的xml中 活动?这不是一个大问题,但我觉得可能会有一个 一种“自动”将其添加到每个孩子的方法。
->是,在每个活动的 onCreate()中启动工具栏。我认为没有其他方法可以做到这一点。
答案 1 :(得分:0)
您可以这样修改 BaseActivity
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getContentView());
// here you can do common things for all activities like toolbar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); // Note: every activity xml should have toolbar.
setSupportActionBar(toolbar);
onViewReady(savedInstanceState, getIntent());
}
protected void onViewReady(Bundle savedInstanceState, Intent intent) {
// To be used by child activities.
}
protected abstract int getContentView();
}
并且将子活动中的BaseActivity 扩展为
public class ChildActivity extends BaseActivity{
@Override
protected int getContentView() {
return R.layout.activity_child;
}
@Override
protected void onViewReady(Bundle savedInstanceState, Intent intent) {
super.onViewReady(savedInstanceState, intent);
// initializations....
}
}