android中ListView中的ArrayIndexOutofBoundException与ArrayList?
我使用一个ListView并将一个适配器设置为两个Arraylist。List和List1是两个ArrayList,它不同于SqliteDatabase的GetAllItem 我的问题是,假设列表有10个项目,而列表1有7个项目,那么当我滚动我的列表视图并成功地将项目显示到7时,但每当第8个项目出现时,就会给出BoundException的错误排列。因为两个ArrayList的大小不同。列表总是比列表1大 如何解决这个错误 请引导我android中ListView中的ArrayIndexOutofBoundException与ArrayList?,android,android-listview,indexoutofboundsexception,Android,Android Listview,Indexoutofboundsexception,我使用一个ListView并将一个适配器设置为两个Arraylist。List和List1是两个ArrayList,它不同于SqliteDatabase的GetAllItem 我的问题是,假设列表有10个项目,而列表1有7个项目,那么当我滚动我的列表视图并成功地将项目显示到7时,但每当第8个项目出现时,就会给出BoundException的错误排列。因为两个ArrayList的大小不同。列表总是比列表1大 如何解决这个错误 请引导我 My code is, Adapter1 adap
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适配器=新适配器1(此,
列表,列表1);
listView1.setAdapter(适配器1);
dbAdapter.openForRead();
list=dbAdapter.getAllMyData();
dbAdapter.close();
dbAdapter.openForRead();
list1=dbAdapter.getDisplayLike();
dbAdapter.close();
/**适配器类*/
公共类适配器1扩展了BaseAdapter{
Context=null;
LayoutInflater LayoutInflater=null;
列表=新的ArrayList();
List list1=新的ArrayList();
公共适配器1(上下文、列表、,
列表1){
this.context=上下文;
this.list=列表;
this.list1=list1;
layoutInflater=layoutInflater.from(上下文);
viewHolder=新的viewHolder();
}
@凌驾
public int getCount(){
返回list.size();
}
@凌驾
公共对象getItem(int位置){
返回列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@SuppressLint(“充气参数”)
@凌驾
公共视图getView(最终整型位置,视图转换视图,
视图组(父级){
视图vi=转换视图;
如果(vi==null){
vi=布局更平坦。充气(R.layout.list\u项目,
父母,假);
viewHolder=新的viewHolder();
/**初始化小部件*/
/**图像视图*/
viewHolder.imgUserIcon=(ImageView)vi
.findviewbyd(R.id.imgUserIcon);
viewHolder.imgImage=(图像视图)vi
.findviewbyd(R.id.imgImage);
viewHolder.imgUnlike=(ImageView)vi
.findviewbyd(R.id.imgUnlike);
viewHolder.imgUnlike.setTag(位置);
viewHolder.imgLike=(ImageView)vi
.findviewbyd(R.id.imgLike);
viewHolder.imgLike.setTag(位置);
/**文本视图*/
viewHolder.txtPostId=(TextView)vi
.findViewById(R.id.txtPostId);
viewHolder.txtUserName=(TextView)vi
.findViewById(R.id.txtUserName);
viewHolder.txtDateTime=(TextView)vi
.findviewbyd(R.id.txtDateTime);
viewHolder.txtLikeUnlike=(TextView)vi
.findviewbyd(R.id.txtLikeUnlike);
viewHolder.txtLikeUnlike.setTag(位置);
vi.setTag(视图持有者);
}否则{
viewHolder=(viewHolder)vi.getTag();
}
最终列表listBean=List.get(位置);
最终列表1 list1Bean=List1.get(位置);
viewHolder.txtPostId.setText(listBean.getiPostId())
+ "");
viewHolder.txtexername.setText(listBean.getName());
viewHolder.txtDateTime.setText(listBean.getStrCreated());
viewHolder.txtLikeUnlike.setText(listBean.getiLike())
+ "");
int-iDisplayLike=list1Bean.getiDisplayLike();
如果(iDisplayLike==1){
viewHolder.imgUnlike.setVisibility(View.GONE);
viewHolder.imgLike.setVisibility(View.VISIBLE);
}
如果(iDisplayLike==0){
viewHolder.imgLike.setVisibility(View.GONE);
viewHolder.imgUnlike.setVisibility(View.VISIBLE);
}
});
返回vi;
}
类视图持有者{
ImageView imgIcon=null,imgImage=null,
imgUnlike=null;
TextView txtPostId=null,txtUserName=null,
txtDateTime=null,
txtLikeUnlike=null;
}
如果要从两个表中提取数据,则首先将两个ArrayList
都加上边框,然后在适配器中传递singleArrayList
,以显示数据,而不是两个列表
在Adapter1
类构造函数中,将两个数组列表对齐:
private ArrayList<DataType> finalList;
public Adapter1(Context mContext,ArrayList list1,ArrayList list2){
finalList = new ArrayList<DataType>(list1);
finalList.addAll(list2);
}
private ArrayList finalList;
公共适配器1(上下文mContext、ArrayList列表1、ArrayList列表2){
finalList=新数组列表(列表1);
finalList.addAll(列表2);
}
现在使用
finalList
来查看getView
和getCount
适配器中使用List
和List1
的方法,为什么需要2个List?将它绑定到单个列表中,并使用model class或hashmap listpost在此处发布适配器…@Ravi因为我使用了两个表来获取数据,所以我在适配器类中使用了两个ArrayListcheck ur getSize()方法,您在那里给出了多大的大小。如果使用大小不同的两个列表,则会产生问题