【问题标题】:ListView not updating properly during search?ListView 在搜索过程中没有正确更新?
【发布时间】:2013-12-31 00:04:29
【问题描述】:

我的 ActionBar 中有一个 EditText。问题是,当我输入文本时,它会正确搜索我的 ListView 并更新 ArrayList,但它似乎认为我的 ListView 仍然与以前一样大小。因此,当我向下滚动 ListView 时,它会在新 ArrayList 中的最后一项之后崩溃。

这里是onTextChanged 函数:

@Override
        public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
            if (charSequence.length() > 0) {
                adapter.updateData(songList, charSequence);

                runOnUiThread(new Runnable() {

                    public void run() {
                        // TODO Auto-generated method stub
                        adapter.notifyDataSetChanged();
                        getListView().refreshDrawableState();
                        getListView().invalidateViews();
                    }
                }); //...
          } }

这是我自定义的updateData 函数:

public void updateData(ArrayList<Song> originalList, CharSequence searchText) {

    itemsArrayList = new ArrayList<Song>();
    String search = searchText.toString();

    for (Song song : originalList) {
        if (search.equalsIgnoreCase((String) song.getName().subSequence(0, searchText.length()))
                || search.equalsIgnoreCase((String) song.getArtist().subSequence(0, searchText.length()))
                || song.getLyrics().contains(search)) {

           this.itemsArrayList.add(song);
        }
    }
}

更新:LogCat 中的错误是“invalid index”

    java.lang.IndexOutOfBoundsException: Invalid index 45, size is 45
        at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)

【问题讨论】:

  • 您是否覆盖了getCount() 以便适配器知道新的计数?

标签: java android listview arraylist


【解决方案1】:

您的 adapter.getCount() 方法是什么样的?你需要覆盖它。另外,不要添加到 ArrayList,根据样式添加到适配器(您不必调用 notifyDataSetChanged())。

【讨论】:

  • 谢谢,重写 adapter.getCount() 修复了它。不知道为什么我不考虑这个!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 2022-01-15
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多