Java 导航抽屉更改碎片时的应用程序绑腿

Java 导航抽屉更改碎片时的应用程序绑腿,java,android,android-fragments,Java,Android,Android Fragments,通过新的支持库提供导航抽屉 这是密码 FragmentManager fragmentManager; Fragment fragment; fragmentManager=getSupportFragmentManager(); fragment= fragmentManager.findFragmentById(R.id.list_view_container); NavigationView navigationView = (NavigationView) findV

通过新的支持库提供导航抽屉

这是密码

 FragmentManager fragmentManager;
Fragment fragment;
 fragmentManager=getSupportFragmentManager();
    fragment= fragmentManager.findFragmentById(R.id.list_view_container);



 NavigationView navigationView = (NavigationView) findViewById(R.id.navigation_view);
 if (navigationView != null) {
        setupNavigationDrawerContent(navigationView);
    }
    setupNavigationDrawerContent(navigationView);




private void setupNavigationDrawerContent(NavigationView navigationView) {
    navigationView.setNavigationItemSelectedListener(
            new NavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(MenuItem menuItem) {
                    switch (menuItem.getItemId()) {
                        case R.id.home:
                            menuItem.setChecked(true);
                            drawerLayout.closeDrawer(GravityCompat.START);
                            fragment = new HomeFragment();
       fragmentManager.beginTransaction().replace(R.id.list_view_container,fragment).commit();
                            return true;
                        case R.id.current_event:
                            menuItem.setChecked(true);
                            drawerLayout.closeDrawer(GravityCompat.START);
                            return true;
                        case R.id.college_events:
                            menuItem.setChecked(true);
                            drawerLayout.closeDrawer(GravityCompat.START);
                            return true;
                        case R.id.national_events:
                            menuItem.setChecked(true);
                            drawerLayout.closeDrawer(GravityCompat.START);
                            return true;
                        case R.id.workshops:
                            menuItem.setChecked(true);
                            drawerLayout.closeDrawer(GravityCompat.START);
                            return true;
                        case R.id.trainings:
                            menuItem.setChecked(true);
                            Toast.makeText(MainActivity.this, "Launching " + menuItem.getTitle().toString(), Toast.LENGTH_SHORT).show();
                            drawerLayout.closeDrawer(GravityCompat.START);
                            return true;
                        case R.id.companies:
                            menuItem.setChecked(true);
                            Toast.makeText(MainActivity.this, menuItem.getTitle().toString(), Toast.LENGTH_SHORT).show();
                            drawerLayout.closeDrawer(GravityCompat.START);
                            return true;
                        case R.id.talents:
                            menuItem.setChecked(true);
                            Toast.makeText(MainActivity.this, menuItem.getTitle().toString(), Toast.LENGTH_SHORT).show();
                            drawerLayout.closeDrawer(GravityCompat.START);
                            return true;
                        case R.id.games:
                            menuItem.setChecked(true);
                            Toast.makeText(MainActivity.this, menuItem.getTitle().toString(), Toast.LENGTH_SHORT).show();
                            drawerLayout.closeDrawer(GravityCompat.START);
                            return true;
                    case R.id.submission:
                            menuItem.setChecked(true);
                            Toast.makeText(MainActivity.this, menuItem.getTitle().toString(), Toast.LENGTH_SHORT).show();
                            drawerLayout.closeDrawer(GravityCompat.START);
                            return true;
                    case R.id.about:
                            menuItem.setChecked(true);
                            Toast.makeText(MainActivity.this, menuItem.getTitle().toString(), Toast.LENGTH_SHORT).show();
                            drawerLayout.closeDrawer(GravityCompat.START);
                            return true;
                }
                    return true;
                }
            });
}
因此,当我点击主页时,片段正在改变,但导航抽屉在关闭时正在打腿,而且当导航抽屉被拉回时,oping过程在比jellyBean更强大的设备中挂起,但在jellyBean和pre jellyBean设备中工作非常好。我的应用程序是用最新的api编译的,即23。请帮助我

因此,当我删除片段更改代码时,就完全没有腿了。
因此,我认为片段更改代码有问题。

您的问题来自于在主线程上绘制图像。 关闭抽屉与创建要显示的片段同时发生。如果任何操作导致UI线程冻结,抽屉将停止移动,这非常明显

任何大型操作都必须在后台线程中完成。

每次单击NavigationView项目时,我都使用add方法更改片段,而不是替换,每次单击时,它都会向活动添加一个新片段。嗯,我刚接触安卓应用程序开发时问过这个问题。

问题也可能来自安卓创建片段的那一刻。在片段的onCreate或onCreateView中是否有任何图片要显示或在线请求或任何db查询?@JDenais是的,我确实有一张图片要显示,其xml文件中有drawable属性。如果图片很重,则可能需要在后台线程上请求它。一个快速的异步任务是完美的。@JDenais我删除了图片,片段工作正常,开始所有的绑腿都没有了,但是,为什么会出现这种情况,在kitkat之前的设备中工作正常,但在后期设备中工作不正常?@JDenais虽然图像会在眨眼之间加载,但我为什么要在AsyncTask中执行此操作,以及为什么此问题仅在新设备中发生