ArrayIndexOutofBoundException с ArrayList в ListView в Android?

Я использую один ListView и установить один адаптер с двумя Arraylist. List и List1 - это два ArrayList, которые отличаются от GetAllItems от SqliteDatabase.

Мой вопрос состоит в том, что в List есть 10 элементов, а в List1 - 7, затем, когда я прокручиваю свой ListView и успешно отображаю элемент до 7, но всякий раз при 8-м элементе выдается ошибка ArrayOutOfBoundExcecption. Разный размер обоих ArrayList. Список всегда больше, чем List1.

Как решить эту ошибку?

Плесай, веди меня.

My code is, 

    Adapter1 adapter = new Adapter1(this,
                            List, List1);
    listView1.setAdapter(Adapter1);

        dbAdapter.openForRead();
            list = dbAdapter.getAllMyData();
            dbAdapter.close();

            dbAdapter.openForRead();

            list1 = dbAdapter.getDisplayLike();
            dbAdapter.close();


/** Adapter Class */
    public class Adapter1 extends BaseAdapter {

        Context context = null;
        LayoutInflater layoutInflater = null;

        List<List> list = new ArrayList<List>();
        List<List1> list1 = new ArrayList<List1>();

        public Adapter1(Context context, List<List> list ,
                List<List1> list1 ) {

            this.context = context;
            this.list  = list ;
            this.list1 = list1;
            layoutInflater = LayoutInflater.from(context);
            viewHolder = new ViewHolder();
        }

        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            return list.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @SuppressLint("InflateParams")
        @Override
        public View getView(final int position, View convertView,
                ViewGroup parent) {
            View vi = convertView;
            if (vi == null) {
                vi = layoutInflater.inflate(R.layout.list_item,
                        parent, false);

                viewHolder = new ViewHolder();
                /** Initialize Widgets */
                /** Imageview */
                viewHolder.imgUserIcon = (ImageView) vi
                        .findViewById(R.id.imgUserIcon);
                viewHolder.imgImage = (ImageView) vi
                        .findViewById(R.id.imgImage);

                viewHolder.imgUnlike = (ImageView) vi
                        .findViewById(R.id.imgUnlike);
                viewHolder.imgUnlike.setTag(position);

                viewHolder.imgLike = (ImageView) vi
                        .findViewById(R.id.imgLike);
                viewHolder.imgLike.setTag(position);



                /** TextView */
                viewHolder.txtPostId = (TextView) vi
                        .findViewById(R.id.txtPostId);
                viewHolder.txtUserName = (TextView) vi
                        .findViewById(R.id.txtUserName);
                viewHolder.txtDateTime = (TextView) vi
                        .findViewById(R.id.txtDateTime);


                viewHolder.txtLikeUnlike = (TextView) vi
                        .findViewById(R.id.txtLikeUnlike);
                viewHolder.txtLikeUnlike.setTag(position);


                vi.setTag(viewHolder);

            } else {
                viewHolder = (ViewHolder) vi.getTag();
            }



            final List listBean= list .get(position);
            final List1 list1Bean= list1.get(position);


            viewHolder.txtPostId.setText(listBean.getiPostId()
                    + "");
            viewHolder.txtUserName.setText(listBean.getName());

            viewHolder.txtDateTime.setText(listBean.getStrCreated());

            viewHolder.txtLikeUnlike.setText(listBean.getiLike()
                    + "");



            int iDisplayLike = list1Bean.getiDisplayLike();
            if (iDisplayLike == 1) {
                viewHolder.imgUnlike.setVisibility(View.GONE);
                viewHolder.imgLike.setVisibility(View.VISIBLE);

            }
            if (iDisplayLike == 0) {
                viewHolder.imgLike.setVisibility(View.GONE);
                viewHolder.imgUnlike.setVisibility(View.VISIBLE);

            }

            });
            return vi;
        }

        class ViewHolder {
            ImageView imgIcon = null, imgImage = null,
                    imgUnlike = null;
            TextView txtPostId = null, txtUserName = null,
                    txtDateTime = null, 
                    txtLikeUnlike = null;
        }

1 ответ

Если вы выбираете данные из двух таблиц, сначала пометьте оба ArrayList затем передать один ArrayList в адаптере для отображения данных вместо двух списков.

В Adapter1 Конструктор класса Marge оба ArrayList:

private ArrayList<DataType> finalList;
 public Adapter1(Context mContext,ArrayList list1,ArrayList list2){
  finalList = new ArrayList<DataType>(list1);
  finalList.addAll(list2);
}

Сейчас использую finalList для в getView а также getCount методы адаптера, где вы используете List а также List1

Другие вопросы по тегам