2016-12-28 87 views
0

我有一个SearchView起来,准备好了,这里是我的页面的java文件中使用的代码具有SearchView:现在使搜索查看做搜索

@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?如果是这样,怎么样?如果没有,我怎样才能以另一种方式实现它?

亲切的问候, 朱利安

+1

试试这个链接:http://stackoverflow.com/questions/30398247/how-to-filter-a-recyclerview-with-a-searchview –

回答

2

SearchView没有做任何搜索的话,那就是对输入的关键字简单的小工具,显示最近使用的关键字,等你应该实现你的“搜索模式”找到内容,并显示在你想要的地方。

+0

我的不好,因为我猜错了问题。所以我已经设置了这一切,我必须采取的下一步是定义Querys或类似的东西或虚拟表,但是如果我想要搜索TextView,我觉得那不是我正在寻找的东西。所以基本上问题是,如果我应该为我的目标创建一个虚拟表。 – user7342339

+0

@ user7342339“搜索TextViews”是什么意思?搜索'TextView'小部件中显示的文本?如果这真的是你想要的(而不是像一个sqlite数据库那样在模型中搜索),你可以使用'TextView.getText()'获取每个文本视图控件的内容。 – xizzhu

+0

我有大约40个TextViews都包含一个单词。我想要做的是搜索TextView中的单词,但我不知道如何告诉SearchViews以及与之相关的所有内容,我想要查找的内容。 – user7342339

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> 
+0

它说,它无法解决方法getActivty(),我是否犯了一个菜鸟错误? :D – user7342339

+0

getActivity()可以替换为您的上下文朋友... 尝试** getApplicationContext()**或传递**上下文**而不是getActivity() 如果您的代码处于活动状态,则删除* * getActivity()。**如果你正在使用片段而不是上面提到的尝试解决方案。 –

+0

我明白了,最后一行的目标是什么?因为(menu,inflate)也被标记为红色,因为onCreateOptionsMenu不能应用于androidViewMenuInflate。感谢您的帮助btw! – user7342339

1

我猜你正在尝试做的是通过内部布局内部定义TextViews文本搜索。 我假设这里的文本源文件中的“Data.java一个字符串数组/的ArrayList(TextViewData)

你可以试试这个:

1)使活动/片段implement SearchView.OnQueryTextListener

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

private ArrayList<Data> mSearchItems 

3)该行添加到您初始化搜索查看代码

searchView.setOnQueryTextListener(this); 

4)重写以下方法:

ⅰ)方法称为上提交:

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

ⅱ)的方法称为上的搜索框中

@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) 
    } 
} 
+0

所以我必须将我的TextViews存储在ArrayList中,对吗? – user7342339

+0

确切的“文本”,而不是TextViews –

+0

示例: 如果您有一个带有textviewone和ArrayList的TextView textData。 而你想在TextView中显示“我的名字是userxyz”。您可以将文本添加到列表中,例如: textData.add(“My name is userxyz”); 并将其显示在textView中: TextView txt =(TextView)findViewById(R.id.textviewone); txt.setText(textData.get(0)); –