簡體   English   中英

Recyclerview addOnItemTouchListener獲取在行內單擊的子視圖

[英]Recyclerview addOnItemTouchListener get whichsubview is clicked inside row

我已經從這個Stack溢出解決方案中實現了Recyclerview onclickListener。 此解決方案適用於回收商項目點擊。 但我無法從行中單擊哪個子視圖(例如:ImageView,Button)。

     mAttachmentRecyclerview.addOnItemTouchListener(
            new RecyclerItemClickListener(getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() {
                @Override
                public void onItemClick(View view, int position) {
                    if (view.getId()==R.id.attachmnet_remove) {
                        attachmentsList.remove(position);
                        mAttachmentAdapter.notifyDataSetChanged();
                        attachmentCount--;
                    }
                }
            }
    ));

onItemClick(view,position)始終將視圖id返回為-1

如何跟蹤點擊的視圖?

下面是一個包含兩個文本視圖的ViewHolder即。 titledescription

public class CustomViewHolder extends RecyclerView.ViewHolder {
    private final OnViewClickListener mListener;
    public final TextView title;
    public final TextView description;

    public interface OnViewClickListener {
        void onViewClick(View v, int adapterPosition);
    }

    public CustomViewHolder(View itemView, OnViewClickListener mListener) {
        super(itemView);
        this.mListener = mListener;
        title = (TextView) itemView.findViewById(R.id.titleTextView);
        description = (TextView) itemView.findViewById(R.id.descriptionTextView);

        title.setOnClickListener(onClickListener);
        description.setOnClickListener(onClickListener);

    }

    private final View.OnClickListener onClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mListener.onViewClick(view, getAdapterPosition());
        }
    };
}

這兩OnClickListener視圖都附加了一個OnClickListener ,它們調用自定義OnViewClickListener實現,傳遞單擊的View以及接收click事件的適配器RecyclerView 位置

最后使用View.getId()OnViewClickListener實現中檢索單擊視圖的id。

該答案已過時,因為它使用了不推薦使用的RecyclerView.getChildPosition(View) 嘗試用RecyclerView.getChildAdapterPosition(View)替換它。

如果我是你,我只會為你ViewHolder的每個ViewHolder及其子視圖創建監聽器。 老實說,我似乎沒有看到使用您引用的更復雜方法的好處。 此外,該方法只會告訴您項目被點擊,項目的子視圖沒有任何內容。

此外,根據文檔 ,當您想要在列表滾動時檢測項目的觸摸時,也可以使用RecyclerView.OnItemTouchListener ,而不是常規或直接觸摸。

設置標簽

您可以在初始化時通過以下方式將標記設置為您的視圖:

view1.setTag(1);

這會將視圖標記設置為1。

然后在onItemClick方法:

@Override
public void onItemClick(View view, int position) {
 if(view.getTag()==1)
 {
 //do something
 }
 else
 {
 //do something else
 }

嘗試將onClickListeners添加到子視圖。

暫無
暫無

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

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