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