Listview Casella di controllo Indice di array Out of Bound Exception
-
23-12-2019 - |
Domanda
Ho un elenco con la casella di controllo, ogni volta che l'utente ha premuto la casella di controllo, sto ottenendo alcune informazioni dell'utente (ad esempio dicono il profilo ID di Facebook) e immagazzinato in Arraylist.now Qual è il problema quando il problema è quando l'utente ha scritato il listview, viene aggiunto o rimosso ulteriormente l'altro ID profilo. non contrassegnato. Fornire
.Indice di array dall'eccezione legata
Ho provato a risolvere il problema ma non riesco a farlo, ti preghiamo di fornirmi qualche soluzione.
Ecco la mia lista completa
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;
}
}
. Soluzione
Aggiungi il seguente codice ed eseguilo di nuovo e mostrami l'uscita del 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;
}
[...]
.
Impedisci alle voci dell'elenco duplicate:
if(!myList.contains(objectToInsert) {
myList.add(objectToInsert);
}
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow