Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 关于跨多个活动重用工具栏的问题_Android - Fatal编程技术网

Android 关于跨多个活动重用工具栏的问题

Android 关于跨多个活动重用工具栏的问题,android,Android,我是Android开发的新手,这个问题可能有一个简单的答案,我想不出来 我现在想在我的应用程序的几乎每个活动中使用工具栏。我已经创建了一个包含所有项目侦听器的基本活动,以及一个设置工具栏(setSupportActionBar),以及只包含工具栏及其设置的XML的方法。只有这一部分很好 现在,当我想要任何活动来扩展此基本活动时,我的问题来了: 是否必须在基本活动和子活动中设置ContentView 如果在调用super.onCreate后在子活动中设置ContentView时,在onCreat

我是Android开发的新手,这个问题可能有一个简单的答案,我想不出来

我现在想在我的应用程序的几乎每个活动中使用工具栏。我已经创建了一个包含所有项目侦听器的基本活动,以及一个设置工具栏
(setSupportActionBar)
,以及只包含工具栏及其设置的XML的方法。只有这一部分很好

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

  • 是否必须在基本活动和子活动中设置ContentView
  • 如果在调用super.onCreate后在子活动中设置ContentView时,在onCreate方法的基本活动中设置工具栏,则会覆盖该工具栏。现在唯一有效的方法是在子级中调用super.onCreate,然后调用setContentView(childLayout),然后调用基本活动的扩展方法来设置工具栏。我觉得这有点骇客,应该有更好的方法
  • 是否必须手动将工具栏添加到每个子活动的XML中?这不是一个大问题,但我觉得可能有一种方法可以“自动”将其添加到每个孩子身上
非常感谢你的帮助

  • 是否必须在基本活动和子活动中设置ContentView

    ->不,您不必同时设置ContentView。只有在子活动中设置才可以

  • 如果我在onCreate方法的基本活动中设置工具栏, 调用后在子活动中设置ContentView时 super.onCreate将覆盖它。现在唯一有效的办法是 在子对象中调用super.onCreate,然后 setContentView(childLayout),然后调用 设置工具栏的baseActivity。我觉得这有点令人讨厌 应该有更好的方法来做到这一点

    ->在要使用的活动中包括工具栏布局。如果您想在每个活动中使用,那么请在每个xml中包含

  • 我是否必须手动将工具栏添加到每个孩子的xml中 活动?这不是什么大问题,但我觉得可能会有问题 “自动”将其添加到每个子项中的方法

    ->是在每个活动的onCreate()中启动工具栏。我认为没有其他方法可以做到这一点


您可以这样修改您的基本活动

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();
}
将子活动中的基本活动扩展为

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

更简单的方法是使用styles.xml。您可以扩展这个@VivekMishra吗?首先尝试自己扩展它。你的应用程序主题应该从
ActionBar
主题扩展