使SearchView进行搜索

时间:2016-12-28 10:44:58

标签: android xml searchview

我已准备好SearchView,这是我在包含SearchView的页面的java文件中使用的代码:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.options_menu, menu);

        // Associate searchable configuration with the SearchView
        SearchManager searchManager =
                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView =
                (SearchView) menu.findItem(R.id.search).getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo(
                new ComponentName(getApplicationContext(), SearchableActivity.class)));


        return true;
    }

我的目标是让SearchView搜索一个充满TextView s的网站。每个TextView都包含一个单词。是否可以让SearchView找到包含我刚输入的单词的TextView?如果是这样,怎么样?如果没有,我怎么能以另一种方式实现呢?

亲切的问候, 儒略

3 个答案:

答案 0 :(得分:2)

SearchView根本不进行任何搜索,它是一个简单的小部件,用于输入关键字,显示最近使用的关键字等。您应该实现“搜索模型”以查找内容,并显示它你想要的地方。

答案 1 :(得分:1)

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.menu_search));
        SearchManager searchManager = (SearchManager) getSystemService(Activity.SEARCH_SERVICE);
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

// Setting up custom search button icon
        int searchImgId = android.support.v7.appcompat.R.id.search_button; // I used the explicit layout ID of searchview's ImageView
        ImageView v = (ImageView) searchView.findViewById(searchImgId);
        v.setImageResource(R.drawable.ic_search_black);
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                // Do operation
                return true;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                return false;
            }
        });

        return true;
    }

menu_search.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:appcompat="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/menu_search"
        style="@android:style/Widget.ActionButton"
        android:icon="@drawable/ic_search_black"
        android:title="@string/search"
        appcompat:actionViewClass="android.support.v7.widget.SearchView"
        appcompat:showAsAction="always" />
</menu>

答案 2 :(得分:1)

我想你要做的是搜索布局中定义的TextViews中的文本。 我假设文本源是文件&#34; Data.java中的String Array / ArrayList(TextViewData)。

你可以尝试一下:

1)制作活动/片段implement SearchView.OnQueryTextListener

2)创建一个空的ArrayList来存储搜索条目结果。

private ArrayList<Data> mSearchItems

3)将此行添加到初始化SearchView的代码

searchView.setOnQueryTextListener(this);

4)覆盖以下方法:

i)要求提交的方法:

    @Override
    public boolean onQueryTextSubmit(String query) {
    //Call a user defined mathod to handle the search.
    handleSearch(query, Data.TextViewData)
}

ii)要求更改搜索框中文本的方法

@Override
public boolean onQueryTextChange(String query) {
    handleSearch(query, Data.TextViewData)
}

5)

private void handleSearch(String Query, ArrayList<Data> queryList){
mSearchItems.clear();
for(Data data  : queryList){
    if(data.textviewone.toLowerCase().contains(Query.toLowerCase()) ||
    data.textviewtwo.toLowerCase().contains(Query.toLowerCase()))
    mSearchItems.add(data);
    //You can then swap the recycler view (if being used) or hide other text views and display only the one being searched for (in case of a match)
   }
}