Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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_Navigation_Drawer - Fatal编程技术网

Android 如何在按下项目后立即关闭导航抽屉?

Android 如何在按下项目后立即关闭导航抽屉?,android,navigation,drawer,Android,Navigation,Drawer,我使用的导航抽屉工作正常,但按下一个项目后,它会慢慢关闭。如果下一个活动在oncreate方法中有一个额外的代码,否则会发生这种情况 因此,请帮助解决这个问题。有closeDrawer(视图)和closerDrawer(int重力)。 在您的项目上单击 .关闭抽屉(重力启动) 为我工作。他们可能对你也有帮助 在displayView()中,您可以从抽屉中获取所选项目,以便指定mDrawerLayout private void displayView(int position) {

我使用的导航抽屉工作正常,但按下一个项目后,它会慢慢关闭。如果下一个活动在oncreate方法中有一个额外的代码,否则会发生这种情况

因此,请帮助解决这个问题。

有closeDrawer(视图)和closerDrawer(int重力)。 在您的项目上单击 .关闭抽屉(重力启动)

为我工作。他们可能对你也有帮助

displayView()
中,您可以从抽屉中获取所选项目,以便指定
mDrawerLayout

     private void displayView(int position) {
                // update the main content by replacing fragments
                Fragment fragment = null;
                switch (position) {
                case 0:
                    //load your fragment here
                    mDrawerLayout.closeDrawer(Gravity.LEFT);


                    break;
    }

在您的项目上单击,您必须关闭drawaer布局

drawlayout = (DrawerLayout) findViewById(R.id.drawer_layout);

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
    // TODO Auto-generated method stub
    Fragment fragment = null;
    switch (position) {
    case 0:
        fragment = new HomeFragment();
        break;

    case 1:
        fragment = new EventFragment();
        break;

    case 2:
        fragment = new SponsorsFragment();
        break;

    case 3:
        fragment = new AboutFragment();
        break;

    case 4:
        fragment = new OurTeamFragment();
        break;

    case 5:
        fragment = new VideoFragment();
        break;

    case 6:
        fragment = new ContactFragment();
        break;

    default:
        break;
    }
    if (fragment != null) {
        FragmentTransaction ft = getSupportFragmentManager()
                .beginTransaction();
        ft.setCustomAnimations(android.R.anim.slide_in_left,
                android.R.anim.slide_out_right);
        ft.replace(R.id.content_frame, fragment);
        ft.commit();
        // pushFragments(fragment, true, true);

        drawlayout.closeDrawers();
    }
}
drawlayout=(抽屉布局)findViewById(R.id.drawer\U布局);
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
//TODO自动生成的方法存根
片段=空;
开关(位置){
案例0:
fragment=新的HomeFragment();
打破
案例1:
fragment=neweventfragment();
打破
案例2:
片段=新的发起人片段();
打破
案例3:
fragment=新的AboutFragment();
打破
案例4:
fragment=新的OurTeamFragment();
打破
案例5:
fragment=新的VideoFragment();
打破
案例6:
fragment=新的ContactFragment();
打破
违约:
打破
}
if(片段!=null){
FragmentTransaction ft=getSupportFragmentManager()
.beginTransaction();
ft.setCustomAnimations(android.R.anim.slide_左移,
android.R.anim.滑出(右);
ft.replace(R.id.content\u frame,fragment);
ft.commit();
//pushFragments(fragment,true,true);
drawlayout.closeDrawers();
}
}

我刚刚设法解决了您遇到的问题

首先我要说的是,我正在从事Android Studio 1.1.0生成的NavigationDrawer项目

这是类NavigationDrawerFragment的方法onCreateView()

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState)
{
    mDrawerListView = (ListView) inflater.inflate(
            R.layout.fragment_navigation_drawer, container, false);

    mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {
            selectItem(position);
        }
    });

    mDrawerListView.setAdapter(new ArrayAdapter<String>(
            getActionBar().getThemedContext(),
            android.R.layout.simple_list_item_activated_1,
            android.R.id.text1,
            new String[]{
                    getString(R.string.title_section1),
                    getString(R.string.title_section2),
                    getString(R.string.title_section3),
            }));

    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);

    return mDrawerListView;
}
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState)
{
mDrawerListView=(ListView)充气器。充气(
R.layout.fragment_导航_抽屉、容器、假);
mDrawerListView.setOnItemClickListener(新的AdapterView.OnItemClickListener()
{
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id)
{
选择项目(位置);
}
});
mDrawerListView.setAdapter(新阵列适配器)(
getActionBar().getThemedContext(),
android.R.layout.simple\u list\u item\u activated\u 1,
android.R.id.text1,
新字符串[]{
getString(R.string.title_第1节),
getString(R.string.title_第2节),
getString(R.string.title_第3节),
}));
mDrawerListView.setItemChecked(mCurrentSelectedPosition,true);
返回mDrawerListView;
}
单击某个项目时

mDrawerListView.setOnItemClickListener()

回调将开火,然后球传给

选择项目(位置)

方法

“selectItem()”方法隐藏NavigationDrawer,并使用回调将一个方法调用到“MainActivity”类-onNavigationDrawerItemSelected()-,该类启动到所选片段的转换

动画出现断断续续/延迟是因为代码试图关闭NavigationDrawer并同时完成UI布局核心工作

如果你想避免这种滞后,你必须选择先做什么

在我自己的工作环境中,我决定:

  • 关闭导航抽屉
  • 完成UI(布局)工作
  • 这是我自己的解决方案:

    mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {
            final int pos = position;
    
            mDrawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener(){
                @Override
                public void onDrawerClosed(View drawerView)
                {
                    super.onDrawerClosed(drawerView);
                    selectItem(pos);
                }
            });
    
            mDrawerLayout.closeDrawer(mFragmentContainerView);
        }
    });
    
    mDrawerListView.setOnItemClickListener(新的AdapterView.OnItemClickListener()
    {
    @凌驾
    public void onItemClick(AdapterView父对象、视图、整型位置、长id)
    {
    最终int pos=位置;
    mDrawerLayout.setDrawerListener(新的DrawerLayout.SimpleDrawerListener(){
    @凌驾
    图纸上的公共空白已关闭(视图抽屉视图)
    {
    super.onDrawerClosed(抽屉视图);
    选择项目(pos);
    }
    });
    mDrawerLayout.closeDrawer(MFFragmentContainerView);
    }
    });
    
    不要被代码弄糊涂了

    我们将selectItem(pos)移动到一个回调中,只有当抽屉关闭时才会触发该回调,然后我们强制抽屉关闭,这样魔术才会发生


    这个解决方案适合我,希望知道它是否也适合你。

    谢谢你的回答,它与我的代码相同,但不是更好。drawer使用此方法关闭,但不平滑。我没有编辑它,我在询问时提到过。Pela vachi ne bolta javSide注意:当用户仅滑动关闭抽屉时,也会调用onDrawerClosed。所以,您最好添加一个标志,使selectItem()仅在用户单击抽屉项目时调用。