通过导航抽屉更改片段时的应用程序绑定

时间:2015-09-15 11:11:17

标签: java android android-fragments

通过新的支持库创建导航抽屉

这是代码

 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;
                }
            });
}

所以,当我点击HOME时片段正在改变,但导航抽屉在关闭的同时正在进行绑定,当导航抽屉被拉回时,操作过程在设备中悬挂,这些设备大于jellyBean但工作正常在果冻豆和预先果冻豆设备中真的很好。我的应用程序是用最新的api编译的,23请帮帮我。

所以当我删除片段更改代码而不是没有绑定时。 所以我认为片段更改代码有问题。

2 个答案:

答案 0 :(得分:0)

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

任何大型操作都必须在后台线程中完成。 http://developer.android.com/training/displaying-bitmaps/process-bitmap.html

答案 1 :(得分:0)

每次我单击NavigationView项时,我使用add()方法更改片段而不是replace(),它用于在每次点击时向活动添加一个新片段。好吧,当我刚接触Android应用程序开发时,我问过这个问题。