使用searchview和搜索建议以及语音搜索过滤回收视图

时间:2017-09-09 20:16:37

标签: android listview search

除语音搜索外,

Android general search functionality似乎还有很好的系统支持来显示搜索建议,例如最近的查询建议和自定义建议。

此框架需要一个人来声明搜索活动。该活动在intent中获取查询,并将搜索结果呈现给ListView。

我有两个问题:

1-我想在当前活动中进行搜索(我在appbar上有一个搜索视图)。那么,该活动是否会重新启动?那会很奇怪。我应该发送一个不可见的活动并取回结果吗?这可能吗?

2-我可以使用RecyclerView而不是ListView吗?我认为不推荐使用ListView而转而使用RecyclerView。

1 个答案:

答案 0 :(得分:0)

  

我想在当前活动中进行搜索(我有一个searchview   在appbar上)。那么,该活动会重新启动吗?

没有。 (如果你当然实施搜索)

  

我可以使用RecyclerView而不是ListView吗?我以为ListView是   不赞成使用RecyclerView。

是的,您可以使用RecyclerView

基本上要在RecyclerView中实现搜索,你必须在适配器类中创建一个公共方法,其参数为List,数据类如下:

 public void setFilter(ArrayList<Items> ItemList){
    Items = new ArrayList<>();
    Items.addAll(ItemList);
    notifyDataSetChanged();
  //Items will be your custom data class
}

然后在Activity中实施SearchView.OnQueryTextListener接口并在onQueryTextSubmit中覆盖方法onQueryTextChangeonQueryTextChange之后实现搜索的 @Override public boolean onQueryTextChange(String newText) { newText = newText.toLowerCase(); ArrayList<Items> ItemArrayList = new ArrayList<>(); for(Items Item : Items) //Items your data class containg data provided to adapter { String name = Item.getTitle().toLowerCase(); // getTitle or getName dependes what you have in Item class if(name.contains(newText)) ItemArrayList.add(Item); } adapter.setFilter(ItemArrayList); // adapter will be instance of adapter class return true; } 中,您可以执行类似的操作这样:

echo '<div id="id01" class="w3-modal">
<div class="w3-modal-content">
<div class="w3-container">
<span onclick="document.getElementById(\'id01\').style.display=\'none\'" class="w3-button w3-display-topright">&times;</span><center><form method=\'POST\' action=\''.setComments($conn).'\'>
<textarea name=\'title\'></textarea>
<input type=\'hidden\' name=\'uid\' value=\''. $_SESSION['username'] . '\'>
<input type=\'hidden\' name=\'date\' value=\'' .date('Y-m-d H:i:s'). '\'>
<textarea name=\'description\'></textarea>        
<textarea name=\'message\'></textarea><br> <button type=\'submit\' name=\'commentSubmit\'>Post!</button>
</form></center>
</div>
</div>
</div>
</div>';