onItemClick ListView中的IndexOutOfBoundsException

时间:2015-12-11 11:27:19

标签: android listview android-listview indexoutofboundsexception

我有简单的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);
                }
        });

2 个答案:

答案 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;
    }
}