java - Android上的抽屉导航滞后

标签 java android navigation-drawer fragmenttransaction

我遇到了 Navigation Drawer 的问题,它太慢了,我正在寻找的解决方案是先关闭抽屉然后显示 Activity ,但是它不起作用,当然我错过了一些东西。

private class DrawerItemClickListener implements ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int posicao, long id) {
            setLastPosition(posicao);
            setFragmentList(lastPosition);
            layoutDrawer.closeDrawer(linearDrawer);
        }
    }

    private OnClickListener userOnClick = new OnClickListener() {
        @Override
        public void onClick(View v) {
            layoutDrawer.closeDrawer(linearDrawer);
        }
    };

    private void setFragmentList(int posicao) {

        FragmentManager fragmentManager = getSupportFragmentManager();
        Fragment fragment = new FragmentViagens();

        switch (posicao) {

            case 0:
                fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
                break;
            case 1:
                fragmentManager.beginTransaction().replace(R.id.content_frame, new FragmentPedidos()).commit();
                break;
            case 2:
                fragmentManager.beginTransaction().replace(R.id.content_frame, new FragmentClientes()).commit();
                break;

        }

        navigationAdapter.setChecked(posicao, true);
        setTitleFragments(lastPosition);
        navigationAdapter.resetarCheck();
        layoutDrawer.closeDrawer(linearDrawer);

    }

最佳答案

你可以这样做以避免抽屉滞后,改变你的onItemClick:

layoutDrawer.closeDrawer(linearDrawer);
setLastPosition(posicao);
new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            setFragmentList(lastPosition);
        }
    }, 200);

编辑: 首选的方式应该是在 DrawerLayout 上设置 DrawerListener 并在 onDrawerClosed 中设置您的 fragment 像这样:

Fragment mFragmentToSet = null;

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    // Handle navigation view item clicks here.
    switch (item.getItemId()) {
        case R.id.nav_home:
            mFragmentToSet = HomeFragment.newInstance(); 
            break;
    }

    mDrawerLayout.closeDrawer(GravityCompat.START);
    return true;
}

mDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
        @Override public void onDrawerSlide(View drawerView, float slideOffset) {}
        @Override public void onDrawerOpened(View drawerView) {}
        @Override public void onDrawerStateChanged(int newState) {}

        @Override
        public void onDrawerClosed(View drawerView) {
          //Set your new fragment here
          if (mFragmentToSet != null) {
            getSupportFragmentManager()
                  .beginTransaction()
                  .replace(FRAGMENT_CONTAINER_ID, mFragmentToSet)
                  .commit();
            mFragmentToSet = null;
          }
        }
    });

关于java - Android上的抽屉导航滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25534806/

相关文章:

java - 如何在 Intellij 13.1.6 社区中编辑 JSP 和 HTML 文件

android - 在 strings.xml 中定义的文本中的 SpannableString

WVGA800 上的 android OutOfMemoryError 而不是任何小屏幕格式

Android:抽屉导航内有 2 个或更多 ExpandableListView

android - 如何使用 Expandable 关闭 NavigationView 中的组菜单

android - 如何在抽屉导航的主要内容 View 中使用多个 fragment

java - Instant.now 相当于 java.util.Date 或 Java 7

java - 是否可以在 Linux 中使用命令行构建 Eclipse 工作区?

java - 类实例化任意类的对象。使用什么模式?

java - 选中 CheckBox 时更改 ListView 行中的文本颜色