Странное поведение, когда я пытаюсь закрыть окно поиска - PullRequest
1 голос
/ 02 мая 2020

Я создал панель инструментов с пиктограммой поиска, которая запускает поисковое окно на cli c. Тем не менее, я попытался добавить setOnQueryTextFocusChangeListener, когда пользователь нажимает кнопку «Назад» на своем телефоне, чтобы закрыть окно поиска, но слева отображается значок, а значок на задней панели панели инструментов всегда присутствует.

enter image description here


Это код 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>

с меню:

<?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/search"
        android:icon="@drawable/ic_search"
        android:title="Search"
        app:showAsAction="ifRoom|collapseActionView"
        app:actionViewClass="androidx.appcompat.widget.SearchView" />

</menu>

и моя деятельность:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        topAppBar = findViewById(R.id.topAppBar);
        setSupportActionBar(topAppBar);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.top_app_bar, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        final SearchView searchView = (SearchView) item.getActionView();

        if (item.getItemId() == R.id.search) {

            searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    if (!hasFocus) {
                        searchView.setIconified(true);
                    }
                }
            });
        }

        return super.onOptionsItemSelected(item);
    }

PS: У меня много проблем с этим поиском, есть ли у вас лучший способ добавить механизм поиска на панель инструментов?

1 Ответ

0 голосов
/ 02 мая 2020

Я исправил проблему, добавив:

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