android - 如何在android中的所有 Activity 中实现抽屉导航

标签 android navigation-drawer

我有一段代码应该在所有 Activity 中显示抽屉导航。代码没有显示任何错误,但在运行它时,不幸的是,在检查 logcat 后,我​​遇到了停止错误,它显示了 java 空指针异常。

这些已经宣布了

   private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;
    protected RelativeLayout _completeLayout, _activityLayout;

    private CharSequence mDrawerTitle;


    private CharSequence mTitle;

    private ArrayList<NavDrawerItem> navDrawerItems;
    private NaviDrawerListAdapter adapter;

onCreate之后

    public void set(String[] navMenuTitles, TypedArray navMenuIcons)
    {
        mTitle = mDrawerTitle = getTitle();

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.left_drawer);

        navDrawerItems = new ArrayList<NavDrawerItem>();

        // adding nav drawer items
        if (navMenuIcons == null) {
            for (int i = 0; i < navMenuTitles.length; i++) {
                navDrawerItems.add(new NavDrawerItem(navMenuTitles[i]));
            }
        } else {
            for (int i = 0; i < navMenuTitles.length; i++) {
                navDrawerItems.add(new NavDrawerItem(navMenuTitles[i],
                        navMenuIcons.getResourceId(i, -1)));
            }
        }

        mDrawerList.setOnItemClickListener(new SlideMenuClickListener());

        // setting the nav drawer list adapter
        adapter = new NaviDrawerListAdapter(getApplicationContext(),
                navDrawerItems);
        mDrawerList.setAdapter(adapter);

        // enabling action bar app icon and behaving it as toggle button
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
        // getSupportActionBar().setIcon(R.drawable.ic_drawer);

        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.ic_launcher, // nav menu toggle icon
                R.string.app_name, // nav drawer open - description for
                // accessibility
                R.string.app_name // nav drawer close - description for
                // accessibility
        ) {
            public void onDrawerClosed(View view) {
                getSupportActionBar().setTitle(mTitle);
                // calling onPrepareOptionsMenu() to show action bar icons
                supportInvalidateOptionsMenu();
            }

            public void onDrawerOpened(View drawerView) {
                getSupportActionBar().setTitle(mDrawerTitle);
                // calling onPrepareOptionsMenu() to hide action bar icons
                supportInvalidateOptionsMenu();
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);

    }
    private class SlideMenuClickListener implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                                long id) {
            // display view for selected nav drawer item
            displayView(position);
        }
    }
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // if nav drawer is opened, hide the action items
        // boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
        // menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
        return super.onPrepareOptionsMenu(menu);
    }
    @Override
    public void setTitle(CharSequence title) {
        mTitle = title;
        getActionBar().setTitle(mTitle);
    }

    /**
     * When using the ActionBarDrawerToggle, you must call it during
     * onPostCreate() and onConfigurationChanged()...
     */

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
           mDrawerToggle.syncState();
    }

空指针异常指向mDrawerToogle.syncState();在 onPostCreate 中

最佳答案

您不需要为不同的 Activity 使用不同的抽屉导航。有一个带有 NavigationDrawer 的 Activity ,并将所有其他 Activity 作为 fragment 。 看看this .

关于android - 如何在android中的所有 Activity 中实现抽屉导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31283602/

相关文章:

android - 在抽屉导航内处理 ViewPager 滑动

java - 在 Android 中使用 App Combat 主题和 ListView

android - 如何从其他 Activity 访问主 Activity 中的实例变量和方法?

java - 错误 incompatible types : android. app.FragmentManager cannot be converted to android.support.v4.app.FragmentManager

android webview 覆盖工具栏

android - 抽屉导航 (menudrawer) Android 5 (lollipop) 样式

android - 如何在触摸外部时关闭 android DrawerLayout?

android - : android. database.sqlite.SQLiteException: no such table: (code 1) Android引起

android - AutoCompleteTextView 适配器, "hidden"适配器?

android - 停留在方向更改的最后一个选项卡上,但不停留在应用程序启动时