ListView在搜索过程中没有正确更新?

时间:2013-12-31 00:04:30

标签: java android listview arraylist

我的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中的错误是“无效索引”

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

1 个答案:

答案 0 :(得分:0)

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