【发布时间】:2018-07-21 09:41:55
【问题描述】:
- 问题是当我单击复选框时,CurrentSelectedItems 没有获取项目。
- 在我添加之前 onItemCheck,,, onItemUnCheck,,,private ClickListener onItemCheckListener,,, private final ClickListener onItemClick,,, this.onItemClick = onItemCheckListener 和.... (holder).setOnClickListener(new View.OnClickListener()) 。它应该允许在 recyclerView 中的项目上单击,但是在我添加这些之后,它会直接断开连接。有什么问题?
-- 在主活动中
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;
}
-- CurrentSelectedItems 没有添加该项目。
@Override
public void onItemCheck(Lodging item) {
currentSelectedItems.add(item);
}
@Override
public void onItemUncheck(Lodging item) {
currentSelectedItems.add(item);
}
});
-- 我的适配器
公共类 LodgingAdapter 扩展 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);
}
如果单击复选框,则 CHECKED_BOX_MAXIMUM++,否则 CHECKED_BOX_MAXIMUM-- 当两个复选框被单击时,其他复选框不可单击。
@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);
}
}
【问题讨论】: