android - 将搜索结果更新为 android 中的惰性适配器

标签 android listview arraylist

我有项目列表,想为它实现搜索功能。因此,我有一个带有 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/

相关文章:

java - 尝试对空对象引用调用接口(interface)方法 'java.lang.Object[] java.util.Collection.toArray()'

java - 如何将数组列表放入另一个类的数组中?

flutter - 如何在使用 ListView.builder 时动态更新特定的 ListView 项?

android - Android的MVP结构如何在Fragment中初始化Presenter

java - 如何创建Android ICS拖放阴影效果?

android - 从 fragment 的适配器中使用毕加索获取图像

android - 试图点击 android ListView 项目 : android:descendantFocusability ="blocksDescendants" not working

c# - 在 MVVM (WPF) 应用程序中更改 ListView 上的筛选器后如何滚动到 View ?

java - 如果对象在 ArrayList 中,我该如何更改它?

android - google play上的license tester需要的支付方式