android – searchlistview?

是否有可能与Android有一个ListView的search栏,以便当触摸search栏时popup一个键盘,当在search栏中键入文本,在ListView中匹配项目显示?

我真正需要的是带有键盘的search栏。

更新:

我已经添加了EditText字段,可以打开一个键盘,我可以inputEditText字段。 我想要的是ListView中显示的列表中的项目的前几个字符匹配input到EditText窗口中的字符。

我试着按照这里列出的方法ListViewfilter,但我有点困惑,有多less过滤已经在ListView中完成?

1)我是否需要创build一个单独的数组来存储与input到EditText中的文本相匹配的值? 从这篇文章调用adapter.notifyDataSetChanged ,看来ListView已经有一个阴影数组来做到这一点,它会在adapter.notifyDataSetChanged(); 叫做。

2)我是否需要调用adapter.notifyDataSetChanged(); 在EditText窗口中键入一些文本后ListView被更新?

3)这个post是否需要扩展ListActivity? 如果是这样的话,如果活动类已经从主要活动扩展了,我该如何扩展我的活动类?

4)我现在有以下几点:

ArrayAdapter<String> adapter = null; private EditText filterText = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.symptom); ListView symptomList = (ListView) findViewById(R.id.ListView_Symptom); symptomList.setTextFilterEnabled(true); symptomList.setFastScrollEnabled(true); filterText = (EditText) findViewById(R.id.search_box); filterText.addTextChangedListener(filterTextWatcher); adapter = new ArrayAdapter<String>(this, R.layout.menu_item, symptomsArray); symptomList.setAdapter(adapter); private TextWatcher filterTextWatcher = new TextWatcher() { public void afterTextChanged(Editable s) { } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { adapter.getFilter().filter(s); adapter.notifyDataSetChanged(); } }; 

不幸的是,在我inputEditText框的时候,我得到了一个N​​ullPointerexception

  Thread [<7> Filter] (Suspended (exception NullPointerException)) ArrayAdapter$ArrayFilter.performFiltering(CharSequence) line: 437 Filter$RequestHandler.handleMessage(Message) line: 234 Filter$RequestHandler(Handler).dispatchMessage(Message) line: 99 Looper.loop() line: 123 HandlerThread.run() line: 60 

任何想法我失踪?

Solutions Collecting From Web of "android – searchlistview?"

你犯了一个很小的错误: – 在设置文本之前创build数组适配器,将监听器改为编辑文本

看到更正的代码

 public class SearchListView extends Activity { /** Called when the activity is first created. */ private ListView lv1; private String lv_arr[] = { "Android", "iPhone", "BlackBerry", "me", "J2ME", "Listview", "ArrayAdapter", "ListItem", "Us", "UK", "India" }; ListView lst; EditText edt; ArrayAdapter<String> arrad; @Override public void onCreate( Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); lv1=(ListView)findViewById(R.id.ListView01); edt = (EditText) findViewById(R.id.EditText01); arrad = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , lv_arr); lv1.setAdapter(arrad); // By using setTextFilterEnabled method in listview we can filter the listview items. lv1.setTextFilterEnabled(true); edt.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged( CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } @Override public void beforeTextChanged( CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } @Override public void afterTextChanged( Editable arg0) { // TODO Auto-generated method stub SearchListView.this.arrad.getFilter().filter(arg0); } }); } 

}

如果您在适配器中实现Filterable , ListView可以处理筛选 。

作为另一种方法,ListView本身可以通过处理onKeyUp事件来显示用户正在input的文本(与使用单独的TextView相反),将ListView滚动到具有input文本的项目,并强调列表显示。 我使用AsyncTask来实现ListView文本search,并提供了一个方便的types提前function。

在这个页面,你可以find一些可能会帮助你的东西

http://thinkandroid.wordpress.com/2010/01/11/custom-cursoradapters/