我做了一个导航抽屉,就像developer.android.com网站上的教程中显示的那样。但是现在,我想使用一个导航抽屉,我在NavigationDrawer.class中创建了多个活动在我的应用程序。

我的问题是,这里是否有人可以做一个小教程,它解释了如何使用一个导航抽屉的多个活动。

我第一次读到这个答案 Android导航抽屉在多个活动

但在我的项目上行不通

public class NavigationDrawer extends Activity {
public DrawerLayout drawerLayout;
public ListView drawerList;
private ActionBarDrawerToggle drawerToggle;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawerToggle = new ActionBarDrawerToggle((Activity) this, drawerLayout, R.drawable.ic_drawer, 0, 0) {

        public void onDrawerClosed(View view) {
            getActionBar().setTitle(R.string.app_name);
        }

        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle(R.string.menu);
        }
    };
    drawerLayout.setDrawerListener(drawerToggle);

    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);

    listItems = getResources().getStringArray(R.array.layers_array);
    drawerList = (ListView) findViewById(R.id.left_drawer);
    drawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, android.R.id.text,
            listItems));
    
    drawerList.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
            drawerClickEvent(pos);
        }
    });
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (drawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    return super.onOptionsItemSelected(item);

}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    drawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    drawerToggle.onConfigurationChanged(newConfig);
}
}

在这个活动中,我想有导航抽屉,所以我扩展了'NavigationDrawer',在其他一些活动中,我想使用相同的导航抽屉

  public class SampleActivity extends NavigationDrawer {...}

当前回答

在baseactivity中更新此代码。不要忘记在你的activity xml中包含drawer_list_header。

super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
setContentView(R.layout.drawer_list_header);

并且不要在你的活动中使用request()。但仍然是抽屉不可见点击图像..和拖动它将可见没有列表项。我尝试了很多,但没有成功。需要一些锻炼…

其他回答

在MainActivity中使用fragment创建导航抽屉。 初始化MainActivity中的导航抽屉 现在,在所有其他活动中,你想使用相同的导航抽屉,把DrawerLayout作为基础,把fragment作为导航抽屉。只需设置android:name在你的片段指向你的片段Java文件。您不需要在其他活动中初始化片段。 你可以通过在谷歌播放商店应用程序中滑动其他活动来访问导航抽屉

我的答案只是一个概念性的答案,没有任何源代码。这对一些像我这样的读者来说可能是有用的。

这取决于你最初构建应用的方法。基本上有两种方法。

You create one activity (base activity) and all the other views and screens will be fragments. That base activity contains the implementation for Drawer and Coordinator Layouts. It is actually my preferred way of doing because having small self-contained fragments will make app development easier and smoother. If you have started your app development with activities, one for each screen , then you will probably create base activity, and all other activity extends from it. The base activity will contain the code for drawer and coordinator implementation. Any activity that needs drawer implementation can extend from base activity.

我个人更倾向于避免在没有任何组织的情况下混合使用片段和活动。这让开发变得更加困难,最终让你陷入困境。如果你已经这样做了,重构你的代码。

对于任何想要做原始海报要求的人,请考虑使用片段代替凯文说的方式。这里有一个关于如何做到这一点的优秀教程:

https://github.com/codepath/android_guides/wiki/Fragment-Navigation-Drawer

如果你选择使用活动而不是片段,你会遇到每次导航到新活动时重新创建导航抽屉的问题。这导致每次导航抽屉的渲染都很难看/缓慢。

我已经找到了最好的实现。在谷歌I/O 2014应用程序中。

他们使用和凯文一样的方法。如果你可以把自己从I/O应用程序中所有不需要的东西中抽象出来,你可以提取你需要的一切,谷歌保证它是导航抽屉模式的正确使用。 每个活动都有一个可选的DrawerLayout作为其主布局。有趣的部分是如何导航到其他屏幕。它在BaseActivity中是这样实现的:

private void goToNavDrawerItem(int item) {
        Intent intent;
        switch (item) {
            case NAVDRAWER_ITEM_MY_SCHEDULE:
                intent = new Intent(this, MyScheduleActivity.class);
                startActivity(intent);
                finish();
                break;

这与用片段事务替换当前片段的常见方法不同。但用户并没有发现视觉上的差异。

这将在接下来的视频教程中详细阐述

使用基本活动的多个活动上的导航抽屉

创建一个基本导航抽屉活动,并将这个基本导航抽屉活动扩展到你想要显示导航抽屉的所有活动是非常容易的,

制作导航菜单,标题 为导航抽屉创建一个基本活动 创建内容布局 组合菜单,标题,内容布局的基础活动 通过使用框架布局,在抽屉菜单中插入每个活动。

所有步骤在视频中都有清楚的解释