我有一个带复选框的列表视图,每当用户按下复选框时我都会收到一些用户信息(例如说facebook的个人资料ID) 并且存储在arraylist中。现在问题是每当用户滚动列表视图时,除了它之外,还添加或删除了一些其他配置文件ID。 没有标记。所以提供
数组索引超出绑定异常
我试图解决问题,但我无法做到,请为我提供一些解决方案。
这是我的完整列表视图
public class MyComposeListItemAdapter extends ArrayAdapter {
public Context mContext;
int row;
public List<MyComposeObject> arrayList;
public ImageLoader imageLoader;
private static LayoutInflater inflater=null;
/*
* Create an ArrayList of Boolean Object to store the state of the each CheckBox
* Initializes the ArrayList items to default value false, means no CheckBox is checked yet.
* When you click on CheckBox. Set a check against Checked/Unchecked state and store that value in ArrayList.
* Now set that position to CheckBox using setChecked() method.*/
private ArrayList<Boolean> itemChecked = new ArrayList<Boolean>();
// for radio button
private RadioButton mCurrentlyCheckedRB;
private boolean userSelected = false;
private int mResourceId = 0;
private RadioButton mSelectedRB;
private int mSelectedPosition = -1;//
public static List<String> selected_profileid =new ArrayList<String>();
public static List<String> selected_profiletype =new ArrayList<String>();
public MyComposeListItemAdapter(Context context, int resource) {
super(context, resource);
// TODO Auto-generated constructor stub
this.mContext = context;
this.row = resource;
arrayList = (ArrayList<MyComposeObject>) Woosuite_Login.composeObjectslist;
// System.out.println("arrayList2"+arrayList.size());
imageLoader=new ImageLoader(context);
for (int i = 0; i < this.getCount(); i++) {
itemChecked.add(i, false); // initializes all items value with false
}
}
@Override
public Context getContext() {
// TODO Auto-generated method stub
return mContext;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return arrayList.size();
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(row, null);
holder = new ViewHolder();
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
holder.userimage_ImageView=(ImageView) convertView.findViewById(R.id.imageView666);
holder.username_TextView=(TextView) convertView.findViewById(R.id.textView666);
holder.checkBox=(CheckBox) convertView.findViewById(R.id.checkBox666);
holder.radioButton=(RadioButton) convertView.findViewById(R.id.radio666);
holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if(isChecked){
itemChecked.set(position, true);
selected_profileid.add(arrayList.get(position).getCom_profileId());
System.out.println("add selected_profileid "+selected_profileid);
selected_profiletype.add(arrayList.get(position).getCom_profileType());
System.out.println("add selected_profiletype.size(); "+selected_profiletype);
}else{
selected_profiletype.remove(arrayList.get(mposition).getCom_profileType());
System.out.println("remove selected_profileid "+selected_profileid);
selected_profileid.remove(arrayList.get(mposition).getCom_profileId());
System.out.println("remove selected_profiletype.size(); "+selected_profiletype);
}
}
});
if(arrayList.get(position).getCom_ProfileImgUrl()!=null){
imageLoader.DisplayImage(arrayList.get(position).getCom_ProfileImgUrl(), holder.userimage_ImageView);
}else{
holder.userimage_ImageView.setImageResource(R.drawable.fb);
}
if(arrayList.get(position).getCom_ProfileName()!=null){
holder.username_TextView.setText(arrayList.get(position).getCom_ProfileName());
}
holder.checkBox.setChecked(itemChecked.get(position));
return convertView;
}
private static class ViewHolder {
ImageView userimage_ImageView;
TextView username_TextView;
CheckBox checkBox;
RadioButton radioButton;
}
}
答案 0 :(得分:1)
请添加以下代码并再次运行并向我显示logcat输出:
[...]
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if(position >= getCount()) {
System.out.println("Error: position '"+position+"' is out of bounds in 'arrayList'");
return;
}
[...]
防止重复列表条目:
if(!myList.contains(objectToInsert) {
myList.add(objectToInsert);
}