![](/img/trans.png)
[英]Disable onItemClick for recyclerView native ads in 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
即。 title
和description
:
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.