导航抽屉过一会儿后,在屏幕上的任何地方都保持关闭状态

时间:2018-08-07 22:24:21

标签: java android navigation navigation-drawer drawer

问题是使用应用程序一段时间后,如果用户打开导航抽屉并触摸导航抽屉的任何地方,甚至导航抽屉的项目,导航抽屉会持续关闭,并且触摸事件会在随机时间发生,因此我无法使用调试。谁能帮我这个忙,我不知道为什么发生

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {

    try {
        // Handle navigation view item clicks here.
        int id = item.getItemId();


        if (id == R.id.nav_share) {

            try {

                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_SEND);
                // change the type of data you need to share,
                //for image use "image/*"
                intent.setType("text/plain");
                intent.putExtra(Intent.EXTRA_TEXT, "https://cafebazaar.ir/app/com.example.mj.darkchat/?l=fa");
                startActivity(Intent.createChooser(intent, "Share"));

            } catch (Exception e) {
            }
        } else if (id == R.id.action_settings) {

            Intent setting = new Intent(MainActivity.this, Setting.class);
            startActivity(setting);

        } else if (id == R.id.action_change_story) {
            onAllStorysRequested();

        }


        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    } catch (Exception e) {
        Log.e("optionSelected", "problem is option one : " + e);
        return true;
    }
}

2 个答案:

答案 0 :(得分:0)

似乎您正在进入一种状态,其中int id = item.getItemId();返回意外的值,并且逻辑上无法检查id值,因此无论您在何处单击,该代码都会进入关闭抽屉代码。由于某种原因,所有菜单项的id字段最终都可能为零。

某些菜单单击似乎启动了一个新活动,可能是在您启动新活动或使应用程序后台运行并返回后返回时,MenuItem对象丢失了它们的itemId值。

建议您添加一些调试日志记录或设置断点并监视要返回的id值。还添加一个final else子句,以便您可以看到意外的menuItem值。即:

...
} else if (id == R.id.action_change_story) {
    onAllStorysRequested();
} else {
    Log.e("optionSelected", "Unexpected MenuItem.id value : " + id);
}

答案 1 :(得分:0)

经过多次测试,我意识到了为什么会发生此问题,问题出在我的xml中,我在NavigationView之后设置了一个视图,并将该视图的可见性设置为消失,因此首先运行一切正常,但是当我将该视图的可见性设置为可见时,白色代码用于通知用户某些信息,并且在用户设置了通知之后,视图的可见性再次消失,而白色代码又使NavigationView变得疯狂,触摸事件没有响应

public function up()
{
Schema::create('books', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id');
});
Schema::table('books', function($table) {
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
}

为了修复,我更改了这样的代码,并在NavigationView之前设置了该视图,我不知道为什么,但是问题得以解决。

<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">

<include
    layout="@layout/app_bar_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />


<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    android:background="@color/bg_drower"
    app:headerLayout="@layout/nav_header_main"
    app:menu="@menu/activity_main_drawer" >
</android.support.design.widget.NavigationView>


<View
    android:id="@+id/correct_answer_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/green"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    android:visibility="gone"/>

</android.support.v4.widget.DrawerLayout>