niestandardowy ListView z polami wyboru sprawdzającymi niezaznaczone elementy
Mam BaseAdapter dla mojego ListView wewnątrz fragmentu, który wygląda tak:
public class SelectionMucListAdapter extends BaseAdapter {
private LayoutInflater inflater = null;
Typeface titleFace;
ArrayList<UsersData> innerList = new ArrayList<UsersData>();
public SelectionMucListAdapter(ArrayList<UsersData> users) {
inflater = (LayoutInflater) mainActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
titleFace = Typeface.createFromAsset(mainActivity.getAssets(), "fonts/bradybun.ttf");
innerList = users;
}
@Override
public int getCount() {
return innerList.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int id) {
return id;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.muc_list_item, null);
viewHolder = new ViewHolder();
viewHolder.image = (ImageView)convertView.findViewById(R.id.item_image);
viewHolder.check = (CheckBox)convertView.findViewById(R.id.cb_choose_user);
viewHolder.title = (TextView)convertView.findViewById(R.id.item_text_1);
viewHolder.rating=(RatingBar)convertView.findViewById(R.id.item_text_2);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder)convertView.getTag();
}
viewHolder.title.setTypeface(titleFace);
Bitmap avatar = innerList.get(position).getUserAvatar();//UsersManager.getInstance().getUsers().get(position).getUserAvatar();
if(avatar != null)
viewHolder.image.setImageBitmap(avatar);
viewHolder.title.setText(innerList.get(position).getUserName());
viewHolder.rating.setRating((float)Double.parseDouble(innerList.get(position).getRating()));
viewHolder.check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton cb, boolean isChecked) {
if(cb.isChecked()) {// if this item is checked then add to list
Log.v("CheckBox", "pos: "+position+" checked");
if(!choices.contains(innerList.get(position))) {
choices.add(innerList.get(position));
}
} else {// if its unchecked then remove from list if exist
Log.v("CheckBox", "pos: "+position+" checked");
if(choices.contains(innerList.get(position))) {
choices.remove(innerList.get(position));
}
}
isChecked = cb.isChecked();
}
});
viewHolder.check.setTag(position);
return convertView;
}
}
static class ViewHolder{
ImageView image;
CheckBox check;
TextView title;
RatingBar rating;
}
class CheckState{
boolean isChecked;
UsersData usersData;
public UsersData getUsersData() {
return usersData;
}
public void setUsersData(UsersData usersData) {
this.usersData = usersData;
}
public boolean isChecked() {
return isChecked;
}
public void setChecked(boolean isChecked) {
this.isChecked = isChecked;
}
}
Mam 20 elementów listy, a problem polega na tym, że gdy sprawdziłem pierwsze 2 elementy, na przykład indeks [0] i [1], jakoś sprawdziłem automatycznie inne elementy w indeksie [9] i [10], gdy przewijam w dół lista. ten sam przypadek miał miejsce, gdy sprawdzałem inne elementy i sprawdzałem wielokrotnie z tym samym wzorem za każdym razem, gdy przewijam listę.
właściwie nie wiem, co się dzieje, więc chcę zapytać, czy ktoś tutaj może powstrzymać ten bałagan. Dziękuję Ci!