工具栏中的 Android SearchView

标签 android android-fragments searchview

我的 Activity 中有工具栏,我曾尝试从菜单中添加搜索 View ,但无法在工具栏中添加搜索 View ,如何在我的 Activity 工具栏中添加搜索 View 。?

最佳答案

我已经通过这种方式处理了Fragment

我用 search viewonTextChangeListener 做了,只需检查你的 Logcat

截图引用:

enter image description here

menu.xml - (res -> menu)

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".HomeActivity">

    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="Search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always" />

</menu>

MainFragment.java

public class MainFragment extends Fragment {

    private SearchView searchView = null;
    private SearchView.OnQueryTextListener queryTextListener;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_main, container, false);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.menu, menu);
        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);

        if (searchItem != null) {
            searchView = (SearchView) searchItem.getActionView();
        }
        if (searchView != null) {
            searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));

            queryTextListener = new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextChange(String newText) {
                    Log.i("onQueryTextChange", newText);

                    return true;
                }
                @Override
                public boolean onQueryTextSubmit(String query) {
                    Log.i("onQueryTextSubmit", query);

                    return true;
                }
            };
            searchView.setOnQueryTextListener(queryTextListener);
        }
        super.onCreateOptionsMenu(menu, inflater);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_search:
                // Not implemented here
                return false;
            default:
                break;
        }
        searchView.setOnQueryTextListener(queryTextListener);
        return super.onOptionsItemSelected(item);
    }
}

完成

关于工具栏中的 Android SearchView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31489109/

相关文章:

android - android SearchView 的搜索类型是什么?

java - 在旋转手机上维护搜索 View 的结果

Android ScrollView 太长

android - 从 Activity 中删除 fragment

android - getFragments 方法在使用替换事务时只返回 1 个 fragment ,用于返回所有

java - 将第二个 Fragment 添加到 ActionBarActivity 时出现 "Duplicate id, tag null, or parent id 0x0 with another fragment"

android - fragment isInLayout 返回 false

android - 如何从searchview中获取文本?

android - 有没有一种方法可以自动化 Android 操作系统测试(而不仅仅是应用程序)?

Android拆分ActionBar - 更改图标布局