我在onTextChanged()函数的adapter.getFilter()。过滤器中遇到错误。我正在关注这个 - How to dynamically update a ListView on Android - 在对话框中创建一个可过滤的列表。
public class CustomizeDialog extends Dialog implements OnClickListener {
private final String[] cityList = {"Seattle", "London"}; private EditText filterText = null;
ArrayAdapter<String> adapter = null;
public CustomizeDialog(Context context) {
super(context);
/** Design the dialog in main.xml file */
setContentView(R.layout.main);
filterText = (EditText) findViewById(R.id.EditBox);
filterText.addTextChangedListener(filterTextWatcher);
this.setTitle("Select");
list = (ListView) findViewById(R.id.List);
list.setAdapter(new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, cityList));
}
@Override
public void onClick(View v) {
/** When OK Button is clicked, dismiss the dialog */
}
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);
}
};
}
答案 0 :(得分:1)
您没有初始化班级的adapter
成员。
尝试更改:
list.setAdapter(new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, cityList));
为:
adapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, cityList);
list.setAdapter(adapter);
该文章的一部分内容为
事实证明这很容易。要运行快速测试,请将此行添加到
onCreate()
来电
adapter.getFilter().filter(s);
请注意,您需要将
ListAdapter
保存到变量才能使其正常工作 - 我已将之前的ArrayAdapter<String>
保存到名为'adapter'
的变量中。
虽然这是误导性的,因为发布的代码并未反映出这种变化。