Java 尝试关闭searchview时的奇怪行为

Java 尝试关闭searchview时的奇怪行为,java,android,android-studio,menu,searchbar,Java,Android,Android Studio,Menu,Searchbar,我创建了一个带有搜索图标的工具栏,可以在clic上启动searchview。但是,当用户按手机上的“后退”关闭searchview时,我尝试添加一个setOnQueryTextFocusChangeListener,但图标出现在左侧,工具栏的“后退”图标始终存在 这是我的工具栏的xml代码: <com.google.android.material.appbar.AppBarLayout android:id="@+id/appBarLayout2" a

我创建了一个带有搜索图标的工具栏,可以在clic上启动searchview。但是,当用户按手机上的“后退”关闭searchview时,我尝试添加一个
setOnQueryTextFocusChangeListener
,但图标出现在左侧,工具栏的“后退”图标始终存在


这是我的工具栏的xml代码:

<com.google.android.material.appbar.AppBarLayout
        android:id="@+id/appBarLayout2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:backgroundTint="@color/white"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/topAppBar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:navigationIcon="@drawable/ic_menu"
            app:title="Notes" />
    </com.google.android.material.appbar.AppBarLayout>


PS:我对这个searchview有很多问题,你有没有更好的方法在工具栏中添加搜索机制?

我通过添加以下内容来解决这个问题:

@Override
    public void onBackPressed() {
        if (searchView != null && !searchView.isIconified())
            searchView.setIconified(true);
        super.onBackPressed();
    }

我通过添加以下内容来解决此问题:

@Override
    public void onBackPressed() {
        if (searchView != null && !searchView.isIconified())
            searchView.setIconified(true);
        super.onBackPressed();
    }

IIRC,您想使用
searchView.setIconified(true)
而不是
searchView.onActionViewCollapsed()
。不幸的是,同样的行为需要等待一秒钟。
filterNotes()
方法的意义是什么?
SearchView
本身已经可以适当地处理展开和折叠。嗯,没有使用filterNotes()来过滤回收视图,但我没有将此部分和
SearchView.setMaxWidth(Integer.MAX_值)放在一起
是在横向模式下扩展searchview,因为它不会占用所有屏幕。我看不到该方法中有任何
RecyclerView
或过滤,但我想我的主要观点是,为什么要在
上将该方法设置为
android:onClick
?为什么不在
onCreateOptions菜单()
onPrepareOptions菜单()
中进行设置,而不是每次单击时进行设置?IIRC,您希望使用
searchView.setIconified(true)
而不是
searchView.onActionViewCollapsed()
。不幸的是,同样的行为需要等待一秒钟。
filterNotes()
方法的意义是什么?
SearchView
本身已经可以适当地处理展开和折叠。嗯,没有使用filterNotes()来过滤回收视图,但我没有将此部分和
SearchView.setMaxWidth(Integer.MAX_值)放在一起
是在横向模式下扩展searchview,因为它不会占用所有屏幕。我看不到该方法中有任何
RecyclerView
或过滤,但我想我的主要观点是,为什么要在
上将该方法设置为
android:onClick
?为什么不在
onCreateOptions菜单()
onPrepareOptions菜单()
中进行设置,而不是每次单击它?
@Override
    public void onBackPressed() {
        if (searchView != null && !searchView.isIconified())
            searchView.setIconified(true);
        super.onBackPressed();
    }