有关在多个活动中重复使用工具栏的问题

时间:2019-03-06 11:05:38

标签: android

我是Android开发的新手,可能这个问题有一个简单的答案,我无法弄清。

我目前想在我的应用的几乎所有活动中使用工具栏。我创建了一个包含所有项目侦听器的基本活动,以及一个用于设置工具栏(setSupportActionBar)的方法,以及仅具有工具栏及其设置的XML。仅此部分即可正常工作。

现在,当我想要任何活动来扩展此基本活动时,我的问题就来了:

  • 我是否必须在基本活动和子活动中都设置setContentView?
  • 如果我在调用super.onCreate之后在子活动中设置ContentView时在onCreate方法的基本活动中设置了工具栏,则该工具栏将被覆盖。现在唯一有效的方法是在子级中调用super.onCreate,然后调用setContentView(childLayout),然后调用用于设置工具栏的基本活动的扩展方法。我觉得这有点hacky,应该有更好的方法。
  • 我是否必须手动将工具栏添加到每个子活动的XML中?这不是什么大问题,但我觉得可能有一种“自动”将其添加到每个孩子的方法。

非常感谢您的帮助!

2 个答案:

答案 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....
}
}