Начать фрагмент с searchView onClick - PullRequest
0 голосов
/ 19 января 2020

Я пытаюсь запустить фрагмент в onSearchClick слушателе SearchView. Фрагмент запускается просто отлично, но через секунду или две открытый SearchView (который по умолчанию обозначается значком) снова сворачивается автоматически, и повторное нажатие на SearchView не вызывает ни onClose, ни onClick. Кроме того, я должен отметить, что я не использую ActionBar, просто панель инструментов, которую я настроил, поэтому я не могу использовать любые методы MenuItem.

Вот код в действии для SearchView:

SearchView main_search = findViewById(R.id.testing_search);

        main_search.setOnSearchClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                search_fragment = new GroupFragment();
                getSupportFragmentManager().beginTransaction().add(R.id.main_activity, search_fragment).commit();
            }
        });

        main_search.setOnCloseListener(new SearchView.OnCloseListener() {
            @Override
            public boolean onClose() {
                return false;
            }
        });

И SearchView в макете:

<androidx.appcompat.widget.SearchView
        android:id="@+id/testing_search"
        android:layout_width="match_parent"
        android:layout_height="65dp"
        android:focusable="false"
        android:layoutDirection="rtl"
        app:defaultQueryHint="Search by course name or code"
        app:iconifiedByDefault="true"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:layout_constraintBottom_toBottomOf="@id/main_toolbar"
        app:layout_constraintTop_toTopOf="@id/main_toolbar"
        app:layout_constraintRight_toRightOf="@id/main_toolbar"/>

1 Ответ

0 голосов
/ 19 января 2020

Я понял это на случай, если у кого-то возникнет эта проблема - просто переместите прослушиватели onClose и onSearchClick для SearchView в метод onCreateView добавляемого фрагмента. Таким образом, фокус не переключается с SearchView на Fragment, так как SearchView содержится во Fragment. Просто запустите фрагмент как обычно из родительской операции.

Фрагмент onCreateView:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val v = inflater.inflate(R.layout.activity_main, container, false)
        val search : SearchView = v.findViewById(R.id.testing_search)
        val toolbar : Toolbar = v.findViewById(R.id.main_toolbar)

        search.setOnSearchClickListener {
            //Do whatever on click
        }

        search.setOnCloseListener {
            //Do whatever on close
            //this boolean is required
            false
        }

        return v
    }
...