在我的计划中,我试图通过ListView
搜索EditText
搜索中的某些联系人。
代码是:
private ArrayList<String> listContacts=new ArrayList<String>();
private ArrayList<String> sortContacts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myprofile_layout);
listViewContacts = (ListView) findViewById(R.id.listViewContacts);
editTextSearch = (EditText) findViewById(R.id.editTextSearch);
listContacts.add("User1");
listContacts.add("Albert");
listContacts.add("lol");
listContacts.add("str");
sortContacts = listContacts;
editTextSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
sortContacts.clear();
for (int i = 0; i < listContacts.size(); i++) {
if(editTextSearch.getText().length() <= listContacts.get(i).length()){
if(listContacts.get(i).toLowerCase().contains(editTextSearch.getText().toString().toLowerCase()))
{
sortContacts.add(listContacts.get(i));
}
}
}
updateAdapter();
}
该程序不起作用:插入ListView
删除字符
通过调试,我发现listContacts
列表为空 (size()=0)
。有什么想法吗?
答案 0 :(得分:0)
替换:
sortContacts = listContacts;
使用:
sortContacts.addAll(listContacts);
正如您可以看到here,当您使用sortContacts.clear();
时,由于行sortContacts
<而您正在清除这两个列表(listContacts
&amp; sortContacts = listContacts;
) / p>
另外,正如Rajitha评论中所述,除非您在ListView
(我看不到)中设置了updateAdapter()
的适配器,否则您的ListView
将不会更新ArrayList
的
答案 1 :(得分:0)
这不是过滤 listView的适配器的推荐方法。
您应该使适配器实现可过滤并使用以下内容:
mAdapter.getFilter().filter(queryText);
请观看谷歌的演讲“the world of listView”了解更多详情,包括使用此方法的优势。