首页 > 解决方案 > How can I get the selected check item in the listView and pass the value to next activity?

问题描述

  1. The problem is when I click the checkbox, the CurrentSelectedItems don't get items.
  2. Before I add onItemCheck,,, onItemUnCheck,,,private ClickListener onItemCheckListener,,, private final ClickListener onItemClick,,, this.onItemClick = onItemCheckListener and.... (holder).setOnClickListener(new View.OnClickListener()) . It should allow onclick on the Item in recyclerView, but after I add these, it direct disconnect. What is the Problem ?

-- In the Main Activity

    lodgingAdapter.setOnItemClickListener( new LodgingAdapter.ClickListener() {
        public void onItemClick(int position, View v) {
            Intent intent = new Intent(FavouriteLodging.this, ViewFavouriteDetails.class);
            intent.putExtra("UserID", getIntent().getStringExtra("UserID"));
            intent.putExtra("LodgingID", ll.get(position).getLodgingId());
            startActivity(intent);
        }

       @Override
        public boolean onItemLongClick(int position, View v) {
            return true;

        }

-- The CurrentSelectedItems didn't add the item.

        @Override
        public void onItemCheck(Lodging item) {
            currentSelectedItems.add(item);
        }

        @Override
        public void onItemUncheck(Lodging item) {
            currentSelectedItems.add(item);

        }
    });

-- My Adapter

public class LodgingAdapter extends RecyclerView.Adapter{

private List<Lodging> ll;
private static ClickListener clickListener;
private static int CHECKED_BOX_MAXIMUM = 0;


public interface ClickListener {
    void onItemClick(int position, View v);
    boolean onItemLongClick(int position, View v);
    void onItemCheck(Lodging item);
    void onItemUncheck(Lodging item);
}

@NonNull
private ClickListener onItemCheckListener;
private final ClickListener onItemClick;

public LodgingAdapter(List<Lodging> LodgingList) {
    ll = LodgingList;
    this.onItemClick = onItemCheckListener;
}


public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener,CompoundButton.OnCheckedChangeListener{

    public TextView title;
    public TextView price;
    public TextView type;
    public ImageView picture;
    public CheckBox cbBox;

    public ViewHolder(View v) {
        super(v);
        v.setOnClickListener(this);
        v.setOnLongClickListener(this);
        title = v.findViewById(R.id.titleTv);
        price = v.findViewById(R.id.priceTv);
        type = v.findViewById(R.id.lodgingTypeTv);
        picture = v.findViewById(R.id.lodgingPicIv);
        cbBox = v.findViewById(R.id.cbCompare);
        cbBox.setOnCheckedChangeListener(this);
    }

   public void setOnClickListener(View.OnClickListener onClickListener) {
        itemView.setOnClickListener(onClickListener);
    }

    public boolean onLongClick(View view) {
        clickListener.onItemLongClick(getAdapterPosition(), view);
        return true;
    }

    @Override
    public void onClick(View view) {
        clickListener.onItemClick(getAdapterPosition(), view);
    }

If the checkbox is clicked then CHECKED_BOX_MAXIMUM++, else CHECKED_BOX_MAXIMUM-- and when two checkbox has been clicked then other checkbox is unclickable.

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        switch (buttonView.getId()){
            case R.id.cbCompare :
                if(isChecked == true){
                    CHECKED_BOX_MAXIMUM++;
                }else{
                    CHECKED_BOX_MAXIMUM--;
                }if (isChecked && CHECKED_BOX_MAXIMUM > 2) {
                     cbBox.setChecked(false);
                     CHECKED_BOX_MAXIMUM--;
            }
        }
    }


}



public void setOnItemClickListener(ClickListener clickListener) {
    LodgingAdapter.clickListener = clickListener;
}

@Override
public void onBindViewHolder(final LodgingAdapter.ViewHolder holder, int position) {

        final Lodging l = ll.get(position);
        holder.title.setText(l.getTitle());
        holder.price.setText("RM" + String.format("%.2f", l.getPrice()));
        holder.type.setText(l.getLodgingType());
      (holder).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                (holder).cbBox.setChecked(!(holder).cbBox.isChecked());
                if ((holder).cbBox.isChecked()) {
                    onItemClick.onItemCheck(l);
                } else {
                    onItemClick.onItemUncheck(l);
                }
            }
        });

        Glide.with(holder.itemView.getContext())
                .load(l.getImage())
                .diskCacheStrategy(DiskCacheStrategy.NONE)
                .skipMemoryCache(true)
                .centerCrop()
                .into(holder.picture);


}

}

This is My First UI, CLICK ME.

After clicking the checkbox, it suppose to pass here one will show on the top and the other will show the bottom. CLICK ME

标签: androidlistviewcheckbox

解决方案


在适配器类中创建一个返回所选项目列表的函数。

并且在单击菜单项时在活动中调用函数,这里将返回列表的大小进行比较> = 2,如果真正的意图是在函数中SelectedItem()


推荐阅读