我有简单的BaseAdatper和对象数组。我也有listView。使用setAdatper()
方法将list包含在listView中。
我在listView上有onItemClick Listener。我收到了:
Fatal Exception: java.lang.IndexOutOfBoundsException Invalid index 0, size is 0
我不明白为什么。因为如果适配器为空,它应该工作onItemClick
。它看起来像listView显示的项目,但如果我在getItem()
适配器中调用onItemClick
为空。为什么呢?
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view, final int position, long id) {
UserModel user = (UserModel) listView.getAdapter().getItem(position);
showFragment(UserDetailsFragment.newInstance(user.getId(), new UserDetailsFragment.OnFollowListener() {
@Override
public void onFollow(boolean value) {
((UserModel) listView.getAdapter().getItem(position)).setFollowedBy(value);
view.findViewById(R.id.following_user).setSelected(value);
}
}), UserDetailsFragment.TAG);
}
});
答案 0 :(得分:0)
您是否覆盖了方法getItem()
?如果是这样,那里面是什么。
答案 1 :(得分:0)
首先:如果您的数组列表为空,则列表视图中的含义不包含任何项目。您没有机会进行OnItemClick&#39;。
第二:请错误地检查你的适配器类你可以从Empty ArrayList中获取一个对象,请检查。 &#39; getCount()&#39;中的条件如下:和&#39; getItem(int position)&#39;参考方法检查波纹管代码。
class TestAdapter extends BaseAdapter {
private ArrayList<Object> arrayList;
// Do your Stuff
public TestAdapter(ArrayList<Object> arrayList) {
// Do your Stuff
this.arrayList = arrayList;
}
@Override
public int getCount() {
return arrayList != null ? arrayList.size() : 0;
}
@Override
public Object getItem(int position) {
return (arrayList != null && arrayList.size() >= position) ? arrayList.get(position) : null;
}
@Override
public long getItemId(int position) {
// Do your Stuff
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Do your Stuff
return null;
}
}