从searchView onClick开始片段

问题描述 投票:0回答:1

我正在尝试在onSearchClickSearchView侦听器中启动片段。片段开始时很好,但是在一两秒钟之内,打开的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"/>
android android-fragments searchview
1个回答
0
投票

[我想出了办法,以防有人遇到这个问题-只需将SearchView的onCloseonSearchClick侦听器移到要添加的片段的onCreateView方法中即可。这样,焦点就不会从SearchView切换到Fragment,因为SearchView包含在Fragment中。只需从父活动正常启动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
    }
© www.soinside.com 2019 - 2024. All rights reserved.