300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Android开发SearchView+ListView实现搜索建议

Android开发SearchView+ListView实现搜索建议

时间:2024-05-30 02:05:08

相关推荐

Android开发SearchView+ListView实现搜索建议

Android开发中,搜索建议的实现一般采用自定义ContentProvider实现。在做app的过程中为了更简便的实现搜索建议,以字符串的匹配问题为例写了个简单的搜索demo如下所示。SearchView用来监听搜索框的输入、状态、对搜索内容的处理,ListView用来对搜索内容处理结果的动态显示以实现搜索建议的功能,这种方式简单之处在于不用完成输入内容后再提交输入内容进行搜索(这里只是以简单的字符串处理为例,更为智能的搜索建议的提供实现要更复杂),因为你想要的内容在搜索建议中就可以找到,点击它就会进入你搜索的内容。

demo的主Activity如下所示:

public class SearchSuggestDemo extends ListActivity implements SearchView.OnQueryTextListener{ListView listView; //显示搜索建议ArrayList<String> list; //数据缓存ArrayAdapter listAdapter; //采用较为简单的ArrayAdapter适配器@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}private void init() {listView = getListView();list = new ArrayList<String>();list.add("c");list.add("cc");list.add("cdn");list.add("cdddddd");list.add("rewt");list.add("seeec");list.add("csbd");list.add("cd244");list.add("cddeeee");list.add("cw4ti");list.add("setcc");list.add("etit");SearchView searchview = (SearchView)findViewById(R.id.searchView);searchview.setOnQueryTextListener(this); //为查询文本框注册监听器}@Overridepublic boolean onQueryTextSubmit(String query) {return false;}@Overridepublic boolean onQueryTextChange(String newText) {ArrayList<String> showlist = new ArrayList<String>(); //搜索建议显示列表for(int i = 0;i < list.size();i++)if(list.get(i).startsWith(newText)) //如果list中包含以newText开头的字符串,则将它放入showlistshowlist.add(list.get(i));listAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,showlist);//创建适配器与数据源showlist绑定setListAdapter(listAdapter);return true;}}

主要是实现onQueryTextChange方法,监听用户输入内容的改变进行处理并显示。

activity_main布局文件如下:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><SearchView android:id="@+id/searchView"android:layout_alignParentTop="true"android:layout_width="fill_parent"android:layout_height="wrap_content"android:queryHint="@string/queryHint"></SearchView><ListView android:id="@android:id/list"android:layout_below="@id/searchView"android:layout_width="fill_parent"android:layout_height="wrap_content"></ListView>"</RelativeLayout>

这里有一点要注意,ListView的id必须指定为Android系统内置的list,因为我的Activity是继承自ListActivity,使用getListView()方法获得的系统list的id,如果改成我自己定义的@+id/mylist,用方法getListView时会报错:无法找到ListView。就得改成findViewById来获得我自己定义的ListView。

这种用法的应用可以参见于一个简单的备忘录应用:

/download/zcdreaming/7640045

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。