NavigationDrawer双击意外行为

时间:2018-04-16 13:32:59

标签: android android-navigation-drawer

我已根据需要实施导航,但工作正常。当我尝试双击任何菜单项时,第一次单击执行所需操作,但第二次单击被理解为打开导航抽屉。所以我面临的问题是,在菜单项上双击(这不是正常的用户行为,这是我们的测试人员报告的错误)后,导航抽屉在新屏幕上保持打开状态。

如果我点击一次,它就可以了。

添加了代码:

  @Override
public boolean onNavigationItemSelected(MenuItem menuItem) {

    Logger.d(TAG, "onNavigationItemSelected");
    mDrawerLayout.closeDrawer(GravityCompat.START);

    switch (menuItem.getItemId()) {
        case R.id.nav_item_profile:
            replaceFragment(new ProfileFragment(), true);
            break;
    }
    return false;
}

menu.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">


    <item
        android:id="@+id/nav_item_home"
        android:icon="@drawable/svg_ic_home_black"
        android:title="Home" />

    <item
        android:id="@+id/nav_item_profile"
        android:icon="@drawable/svg_ic_face_black_24_px"
        android:title="Profile" />

</menu>

3 个答案:

答案 0 :(得分:0)

点击任何项目时,我们总是需要关闭抽屉。这不会让用户双击项目。

      <ion-item *ngFor="let user of users">
        <ion-row>
          <ion-col col-4>
            {{user.fields.date}}
          </ion-col>
          <ion-col col-4>
                {{user.fields.duration}}
          </ion-col>

答案 1 :(得分:0)

您所面对的是理想的行为,因为当您第一次点击抽屉物品时,它会关闭抽屉,而第二次点击会使其再次打开。

根据您的需要,如果您不想在第二次点击时打开抽屉,那么您需要为此添加条件。

如果用户立即点击,则不要打开它,让它保持关闭状态

答案 2 :(得分:0)

没有这样的方法可以让NavigationDrawer双击,否则你可以在代码下面使用

private boolean doublePressed=false; //Global variable

@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {

    Logger.d(TAG, "onNavigationItemSelected");
    mDrawerLayout.closeDrawer(GravityCompat.START);

    switch (menuItem.getItemId()) {
        case R.id.nav_item_profile:
            if (doublePressed) {
                replaceFragment(new ProfileFragment(), true);
                return false;
            }
            doublePressed = true;
            new Handler().postDelayed(new Runnable() {

                @Override
                public void run() {
                    doublePressed = false;
                }
            }, 2000);//You can modify this time, here 2 sec.

            break;
    }
    return false;
}