android - How can I get the selected check item in the listView and pass the value to next activity?
问题描述
- The problem is when I click the checkbox, the CurrentSelectedItems don't get items.
- 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);
}
}
解决方案
在适配器类中创建一个返回所选项目列表的函数。
并且在单击菜单项时在活动中调用函数,这里将返回列表的大小进行比较> = 2,如果真正的意图是在函数中SelectedItem()