如何创建流畅的导航抽屉

fis*_*h40 24 android navigation-drawer

我在导航抽屉中使用示例.当点击左侧抽屉列表视图的项目时,它会显示一些图像,但抽屉布局关闭不顺畅.

点击列表视图项后,我该怎么做才能平滑地关闭左侧抽屉布局.

Pau*_*rke 62

不确定这是最好的路线,但我解决这个问题的方法是创建一个运行中的待处理Runnable onDrawerClosed.例如:

private void selectItem(final int position) {
    mPendingRunnable = new Runnable() {
        @Override
        public void run() {
            // update the main content by replacing fragments
            Fragment fragment = new PlanetFragment();
            Bundle args = new Bundle();
            args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);
            fragment.setArguments(args); 

            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
        }
    });

    // update selected item and title, then close the drawer
    mDrawerList.setItemChecked(position, true);
    setTitle(mPlanetTitles[position]);
    mDrawerLayout.closeDrawer(mDrawerList);
}

@Override
public void onDrawerClosed(View view) {
    getActionBar().setTitle(mTitle);
    invalidateOptionsMenu();

    // If mPendingRunnable is not null, then add to the message queue 
    if (mPendingRunnable != null) {
        mHandler.post(mPendingRunnable);
        mPendingRunnable = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我想补充一下:因为在启动你的应用程序时没有调用`onDrawerClosed()`,你还应该在`onCreate()`的末尾将`mPendingRunnable`发布到`mHandler`. (5认同)
  • @ChaseFlorell只需创建一个成员变量.例如`Handler mHandler = new Handler();` (3认同)

Geo*_*zov 11

工作完美

private class DrawerItemClickListener implements ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
            mDrawerLayout.closeDrawer(mDrawerList);
            mDrawerLayout.postDelayed(new Runnable() {
                @Override
                public void run() {
                    selectItem(position);
                }
            }, 300);
        }
    }
Run Code Online (Sandbox Code Playgroud)