Только два флажка могут выбрать пользователя, как этого добиться? - PullRequest
0 голосов
/ 04 ноября 2019

Это скриншот

Я хочу выбрать только два флажка из списка флажков ..................... .................................................. .................................................. .................................................. .................................................. .................................................. .........

Ниже мой код

 public class OfferItemsAdapter extends RecyclerView.Adapter<OfferItemsAdapter.ViewHolder> {
    private ArrayList<TaskListModel.Option> mDataset;
    String strFreeItem;

    OfferItemsAdapter(ArrayList<TaskListModel.Option> reviwsLists, String strFreeItem) {
        mDataset = reviwsLists;
        this.strFreeItem = strFreeItem;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.addon_list_cart_item, parent, false);

        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        holder.cbProduct.setText(mDataset.get(position).getItemName());
        holder.tvProductPrice.setVisibility(View.GONE);

        if (strFreeItem.equalsIgnoreCase("1")) {

            if (mDataset.get(position).isChecked()) {
                holder.cbProduct.setChecked(true);
                selectedItems.add(mDataset.get(position).getItemID());
            } else {
                holder.cbProduct.setChecked(false);
                selectedItems.remove(mDataset.get(position).getItemID());
            }

        }

        holder.cbProduct.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (strFreeItem.equalsIgnoreCase("1")) {

                    if (selectedItems.size() == 1 && selectedItems.contains(mDataset.get(position).getItemID())) {
                        mDataset.get(position).setChecked(false);
                    } else {
                        mDataset.get(position).setChecked(true);
                    }
                }

                notifyDataSetChanged();

                Log.e("selectedItems.toString()............",""+selectedItems.toString());
            }
        });

    }

    @Override
    public int getItemCount() {
        return mDataset == null ? 0 : mDataset.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        public View mainView;
        TextView tvProductPrice;
        CheckBox cbProduct;

        public ViewHolder(View v) {
            super(v);
            mainView = v;
            tvProductPrice = v.findViewById(R.id.tvProductPrice);
            cbProduct = v.findViewById(R.id.cbProduct);
        }
    }
}

1 Ответ

0 голосов
/ 04 ноября 2019

Прежде всего, вы должны использовать setOnCheckedChangeListener вместо setOnClickListener.

И использовать setOnCheckedChangeListener и проверять размер selectedItems каждый раз, когда пользователь устанавливает флажок следующим образом.

holder.cbProduct.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

       @Override
       public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
          if (isChecked){
              if(selectedItems.size()<2){
                  selectedItems.add(mDataset.get(position).getItemID());
                  mDataset.get(position).setChecked(true);
              }else{
                  holder.cbProduct.setChecked(false);
                // here you can show a toast or log that user can't select more than two items.
              }
          }else{
             selectedItems.remove(mDataset.get(position).getItemID());
             mDataset.get(position).setChecked(false);
          }
       }
   }
);    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...