【发布时间】:2011-04-02 18:38:50
【问题描述】:
Android 是否可以为 ListView 设置一个搜索栏,以便在触摸搜索栏时弹出键盘,并且在搜索栏中输入文本时,显示 ListView 中匹配的项目?
我真正需要的是带键盘的搜索栏。
更新:
我添加了 EditText 字段,该字段可以调出键盘,我可以在 EditText 字段中输入内容。我想要的是让 ListView 中显示的列表中项目的前几个字符与输入到 EditText 窗口中的字符匹配。
我已经尝试按照此处列出的方法ListView Filter,但对于 ListView 中已经完成了多少过滤,我有点困惑?
1) 我是否需要创建一个单独的数组来存储与键入到 EditText 中的文本匹配的值?从这篇文章Call 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();
}
};
不幸的是,当我在 EditText 框中键入时,我在
中得到一个 NullPointer 异常 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
知道我错过了什么吗?
【问题讨论】:
标签: android