我的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)
答案 0 :(得分:0)
你的adapter.getCount()方法是什么样的?你需要覆盖它。另外,不要添加到ArrayList,作为样式添加到适配器(您不必再调用notifyDataSetChanged())。