【问题标题】:Is there a way to use SearchView in Fragment?有没有办法在 Fragment 中使用 SearchView?
【发布时间】:2016-09-10 15:53:52
【问题描述】:

首先,感谢大家的(未来)回复:)

下面解释我的问题:

我有一个名为 MainActivity 的主 Activity,我在其中使用了一个 Fragment。因此,我的 Fragment 包含一个 SearchView 和一个 ListView,其中将包含根据用户输入的建议...请注意,我没有在 ActionBar 中使用它,而是在我的布局文件中使用它...

这里是 fragment_board_menu.xml,xml 文件欺骗了我的 Fragment BoardMenuFragment

<android.support.v7.widget.SearchView
        android:id="@+id/board_searchView"
        android:layout_marginLeft="3dp"
        android:layout_marginStart="3dp"
        android:background="@color/green"
        app:searchIcon="@drawable/ic_search"
        app:searchHintIcon="@drawable/ic_search"
        app:closeIcon="@drawable/ic_close"
        app:defaultQueryHint="@string/create_newboard_hint"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <ListView
        android:layout_below="@+id/board_searchView"
        android:background="@drawable/listview_border"
        android:layout_marginBottom="@dimen/listview_border_marginBottom"
        android:layout_marginLeft="3dp"
        android:layout_marginStart="3dp"
        android:id="@+id/board_listView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

他是BoardMenuFragment.java,我的Fragment java文件:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_board_menu, container, false);
    setupSearchView(view);

    // LISTVIEW
    // TODO This view is an example, don't forget to delete it
    values = new ArrayList<>();
    values.add("pomme");
    values.add("poire");
    values.add("banane");
    values.add("cerise");
    values.add("citron");
    adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_expandable_list_item_1, android.R.id.text1, values);
    board_listView.setAdapter(adapter);

    return view;
}

private void setupSearchView(View view) {
    SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
    final SearchView searchView = (SearchView) view.findViewById(R.id.searchView);
    SearchableInfo searchableInfo = searchManager.getSearchableInfo(getActivity().getComponentName());
    searchView.setSearchableInfo(searchableInfo);
}

但我有一个例外:

 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.SearchView.setSearchableInfo(android.app.SearchableInfo)' on a null object reference

所以我的问题是:是否可以使用 SearchManagerSearchableInfoFragment 中使用 SearchView 因为我尝试使用 setOnQueryTextListener 来完成它并且它有效,但我认为这不是最好的方法,因为我看到了很多创建 SearchableActivity 的教程......

【问题讨论】:

    标签: java android fragment searchview


    【解决方案1】:

    我有一个类似的问题并找到了答案in this question 您需要获取 SearchableActivity 的组件名称。

    new ComponentName(this, SearchableActivity.class)
    

    【讨论】:

      猜你喜欢
      • 2015-10-06
      • 2020-02-06
      • 1970-01-01
      • 2021-06-18
      • 2016-03-21
      • 1970-01-01
      • 2014-06-13
      • 2021-12-21
      • 2012-10-28
      相关资源
      最近更新 更多