【问题标题】:Navigation drawer lag导航抽屉滞后
【发布时间】:2014-11-19 14:00:27
【问题描述】:

每次我打开一个新活动时,导航抽屉都会滞后。我在谷歌上寻找解决方案,我发现我可以通过使用 Handler 延迟新活动来解决它。我尝试了一点,但没有成功。

来自 MainActivity.java 的一些代码片段:

 public void SelectItem(int possition) {

        Fragment fragment = null;
        Bundle args = new Bundle();
        switch (possition) {

            case 2:
                fragment = new FragmentZero();
                break;
            case 3:
                fragment = new FragmentOne();
                break;
            case 4:
                fragment = new FragmentTwo();
                break;
            case 5:
                fragment = new FragmentThree();
                break;
            case 7:
                fragment = new FragmentTwo();
                break;
            case 8:
                fragment = new FragmentZero();
                break;
            case 9:
                fragment = new FragmentOne();
                break;
            case 10:
                fragment = new FragmentTwo();
                break;
            case 11:
                fragment = new FragmentZero();
                break;
            case 12:
                fragment = new FragmentOne();
                break;
            case 14:
                fragment = new FragmentZero();
                break;
            case 15:
                fragment = new FragmentOne();
                break;
            case 16:
                fragment = new FragmentTwo();
                break;
            default:
                break;
        }

        fragment.setArguments(args);
        FragmentManager frgManager = getFragmentManager();
        frgManager.beginTransaction().replace(R.id.content_frame, fragment)
                .commit();

        mDrawerList.setItemChecked(possition, true);
        setTitle(dataList.get(possition).getItemName());
        mDrawerLayout.closeDrawer(mDrawerList);
    }

 private class DrawerItemClickListener implements ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                                long id) {
            if (dataList.get(position).getTitle() == null) {
                SelectItem(position);
            }
        }
    }

【问题讨论】:

  • 不是您问题的答案,但您可以像这样捆绑 case 语句以使您的代码更紧凑。请参阅 SwitchDemo2 文章here
  • 感谢您的回答,但正如您所说,这不是我的问题。
  • 这就是我将其添加为评论的原因 ;)

标签: android navigation lag drawer


【解决方案1】:

在您的活动中创建一个处理程序并在您的 on create 方法中对其进行初始化

private Handler mHandler;
mHandler = new Handler();

然后将您的抽屉项单击侦听器更改为此。

 private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, final int position,
                            long id) {
        if (dataList.get(position).getTitle() == null) {
            mHandler.postDelayed(new Runnable() {
              @Override
              public void run() {
                  SelectItem(position);;
              }
            }, 250);  
        }
        mDrawerList.setItemChecked(possition, true);
        mDrawerLayout.closeDrawer(mDrawerList);
    }
}

并将 SelectItem 方法更改为此

 public void SelectItem(int possition) {

    Fragment fragment = null;
    Bundle args = new Bundle();
    switch (possition) {

        case 2:
            fragment = new FragmentZero();
            break;
        case 3:
            fragment = new FragmentOne();
            break;
        case 4:
            fragment = new FragmentTwo();
            break;
        case 5:
            fragment = new FragmentThree();
            break;
        case 7:
            fragment = new FragmentTwo();
            break;
        case 8:
            fragment = new FragmentZero();
            break;
        case 9:
            fragment = new FragmentOne();
            break;
        case 10:
            fragment = new FragmentTwo();
            break;
        case 11:
            fragment = new FragmentZero();
            break;
        case 12:
            fragment = new FragmentOne();
            break;
        case 14:
            fragment = new FragmentZero();
            break;
        case 15:
            fragment = new FragmentOne();
            break;
        case 16:
            fragment = new FragmentTwo();
            break;
        default:
            break;
    }

    fragment.setArguments(args);
    FragmentManager frgManager = getFragmentManager();
    frgManager.beginTransaction().replace(R.id.content_frame, fragment)
            .commit();
    setTitle(dataList.get(possition).getItemName());
}

【讨论】:

  • 我搞定了,我已经将计时器设置为 300,但我仍然不喜欢它的工作方式。当我按下抽屉面板上的按钮时,它滑动得很好而且很慢,然后活动就像一瞬间,瞬间。
  • 您可以为片段之间的过渡设置动画,以帮助平滑一切。查看此问题以获取更多信息。 stackoverflow.com/questions/4932462/…
猜你喜欢
  • 2014-10-21
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 2021-01-10
相关资源
最近更新 更多