列表视图中有复选框,滚动会丢失所选复选框并随机选中复选框

时间:2016-06-23 12:51:54

标签: android listview checkbox android-arrayadapter

列表视图中有复选框,滚动会丢失所选复选框并选中随机复选框 在listview中有复选框,滚动会丢失所选的复选框和 随机复选框被检查。 我正在滚动此列表视图选中复选框未选中。 Checkbox失去状态

public class FriendList extends ArrayAdapter<FriendListResult> {
    private List<FriendListResult> list;
    LayoutInflater layoutInflater;
    public int resource;
    private Holder holder = null;

  //Constructor
  public FriendList(Context context, int resource, List<FriendListResult> objects) {
    super(context, resource, objects);
    this.list = objects;
    this.resource = resource;
      // Cache the LayoutInflate to avoid asking for a new one each time.
    this.layoutInflater = LayoutInflater.from(context);
    }

// getview method
@Override
public View getView(final int position, View view, ViewGroup parent) {
// check if view is null or not
// create new row view
    if (view == null) {
// inflating layout
        view = layoutInflater.inflate(resource, null);
// initializing  holder
        holder = new Holder();
        holder.txtTitle = (TextView) view.findViewById(R.id.tvContactNameMain);
     // checkbox defined
        holder.checkBox = (CheckBox) view.findViewById(R.id.chkboxFriendListItem);
        view.setTag(holder);
    } 
    else {
        holder = (Holder) view.getTag();
    }
    // set value from the list
    final FriendListResult friendListResult = list.get(position);
    // get and set name
    holder.txtTitle.setText(friendListResult.getNickname());

// checkbox changeListener
holder.checkBox.setOnCheckedChangeListener(new  >CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
//  Maximum three selection for checkbox
  {   
  if (checkArrayList.size() >= 3 && isChecked) {
        buttonView.setChecked(false); 
Toast.makeText(getContext(), "You have already chosen 3 friends",
        Toast.LENGTH_LONG).show();
    } else if (isChecked) {
       //  storing position id to arraylist
        checkArrayList.add(getItem(position).getId());
        notifyDataSetChanged();
      // userCheckCount to get the count
        userCheckCount++;
    } else if (!isChecked) {    
    //removing position from arraylist
        checkArrayList.remove(getItem(position).getId());
        notifyDataSetChanged();
        userCheckCount--;
    }    
  } 
 });
  return view;
}
 // holder class initializing widgets
    class Holder {   
    private TextView txtTitle;
    private CheckBox checkBox;
    }
}

1 个答案:

答案 0 :(得分:0)

您可以查看此链接。 使用POJO类保存复选框的已检查状态。 它的简单只需要通过这个链接。

  

http://android-pratap.blogspot.in/2015/01/recyclerview-with-checkbox-example.html

     

CheckBox in RecyclerView keeps on checking different items