【问题标题】:Start Fragment from searchView onClick从 searchView onClick 开始 Fragment
【发布时间】:2020-01-19 04:18:21
【问题描述】:

我正在尝试在SearchViewonSearchClick 侦听器中启动片段。 Fragment 启动得很好,但在一两秒钟内打开的 SearchView(默认为图标)再次自动折叠,并且重新单击 SearchView 不会调用 onClose 和 onClick。另外我应该注意我没有使用 ActionBar,只是我自定义的 Toolbar,所以我不能使用任何 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】:

    如果有人遇到此问题,我想通了 - 只需将 SearchView 的 onCloseonSearchClick 侦听器移动到正在添加的片段的 onCreateView 方法中。这样,焦点不会从 SearchView 切换到 Fragment,因为 SearchView 包含在 Fragment 中。只需从父 Activity 正常启动 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
        }
    

    【讨论】:

      猜你喜欢
      • 2020-02-19
      • 2015-06-14
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      相关资源
      最近更新 更多