簡體   English   中英

如何在listView中獲取選中的檢查項目並將值傳遞給下一個活動?

[英]How can I get the selected check item in the listView and pass the value to next activity?

  1. 問題是,當我單擊復選框時, CurrentSelectedItems無法獲取項目。
  2. 在添加onItemCheck, onItemUnCheck, 私有ClickListener onItemCheckListener, 私有最終ClickListener onItemClick之前,請添加this.onItemClick = onItemCheckListener和.... (所有者).setOnClickListener(new View.OnClickListener()) 它應該允許onclick在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);


}

}

這是我的第一個用戶界面,點擊我

單擊復選框后,它想通過此處,一個將顯示在頂部,另一個將顯示在底部。 點擊我

在適配器類中,創建一個返回所選項目列表的函數。

然后在活動中單擊菜單項時調用該函數,在此對返回列表的大小進行比較> = 2,如果為true,則如函數SelectedItem()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM