我有项目列表,想为它实现搜索功能。因此,我有一个带有 addTextChangedListener 的文本框。
搜索结果很好,但是当我尝试将结果设置为 ListView 时,新结果会附加到旧结果中。
我正在使用惰性适配器。如何从我的适配器中清除旧结果?
代码如下:
ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
ArrayList<HashMap<String, String>> searchResults = new ArrayList<HashMap<String, String>>();
searchText = (EditText) findViewById(R.id.searchText);
//Count from the server
int count = dataCount();
for (int i = 0; i < dataCount; i++)
{
HashMap<String, String> map = new HashMap<String, String>();
// adding data to HashMap key => value
map.put(KEY_ID, trackNumber);
map.put(KEY_TITLE, trackTitle);
map.put(KEY_ARTIST, trackArtist);
map.put(KEY_DURATION, trackDuration);
map.put(KEY_THUMB_URL, trackAlbumArt);
// adding HashList to ArrayList
songsList.add(map);
}
adapter=new LazyAdapter(this, songsList);
list.setAdapter(adapter);
文本观察器
nameText.addTextChangedListener(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)
{
getSong(s);
}
});
获取结果:
Map getSong(CharSequence s)
{
for (HashMap<String, String> map : songsList)
{
if(map.get(KEY_TITLE).contains(s))
{
Log.e("Map","Son"+map);
HashMap<String, String> map2 = new HashMap<String, String>();
// adding each child node to HashMap key => value
map2.put(KEY_ID, map.get(KEY_ID));
map2.put(KEY_TITLE, map.get(KEY_TITLE));
map2.put(KEY_ARTIST, map.get(KEY_ARTIST));
map2.put(KEY_DURATION, map.get(KEY_DURATION));
map2.put(KEY_THUMB_URL, map.get(KEY_THUMB_URL));
searchResults.add(map2);
}
}
adapter=new LazyAdapter(this, searchResults);
list.setAdapter(adapter);
adapter.notifyDataSetChanged();
return Collections.emptyMap();
}
谢谢!
最佳答案
开始之前,您并不是在“清理”旧的搜索结果。
添加以下行:
searchResults = new ArrayList<HashMap<String, String>>();
在方法 getSong()
的开头(for 循环之前)
关于android - 将搜索结果更新为 android 中的惰性适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25088932/