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中执行此操作,以及为什么此问题仅在新设备中发生