【问题标题】:How can I get the selected check item in the listView and pass the value to next activity?如何在 listView 中获取选定的检查项并将值传递给下一个活动?
【发布时间】:2018-07-21 09:41:55
【问题描述】:
  1. 问题是当我单击复选框时,CurrentSelectedItems 没有获取项目。
  2. 在我添加之前 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);


}

}

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

【问题讨论】:

    标签: android listview checkbox


    【解决方案1】:

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

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

    【讨论】:

    • 嗨,我真的是 android 新手。你能给我举个例子吗。我已经找到了很多解决方案,但没有人能解决它......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 2013-05-06
    • 2017-09-21
    • 1970-01-01
    相关资源
    最近更新 更多