【发布时间】:2016-03-17 07:17:41
【问题描述】:
我有一个带有对象数组的简单 BaseAdatper。我也有listView。使用 setAdatper() 方法将 Adatper 包含到 listView 中。
我在 listView 上有 onItemClick 侦听器。我收到了:
Fatal Exception: java.lang.IndexOutOfBoundsException Invalid index 0, size is 0
我不明白为什么。因为如果适配器为空,它应该可以工作onItemClick。它看起来像在 listView 上显示的项目,但如果我在 onItemClick 中调用 getItem(),则适配器为空。为什么?
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);
}
});
【问题讨论】:
-
可能是这一行,
((UserModel) listView.getAdapter().getItem(position)).setFollowedBy(value);,因为您正在从适配器获取项目,而适配器中没有任何项目 -
是的,但这应该是不可能的(当没有项目时你怎么能点击一个项目?)
-
尝试在访问项目之前比较位置。
-
是的,有可能,您是否在适配器方法中添加了
getItem()以返回对象UserModel?并确保将对象传递给适配器。 -
方法
getItem()被定义并返回对象。我认为你是对的:((UserModel) listView.getAdapter().getItem(position)).setFollowedBy(value);因为当适配器可能为空时它会触发。但为什么。谢谢,我会检查
标签: android listview android-listview indexoutofboundsexception