有人可以帮我纠正这段代码吗?

时间:2010-11-01 05:28:13

标签: java android listview filter

我在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);
    }
};
}

1 个答案:

答案 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'的变量中。

虽然这是误导性的,因为发布的代码并未反映出这种变化。