我有一个RecyclerView活动,列表中的每个项目如下所示。星星应该是可点击的,当用户点击它时,预计会变成黑星。如果使用单击列表项目,它将输入新的活动,其中提供了与所选列表项目相对应的更多详细信息。 :由于容器本身的点击侦听器,无法处理点击Recycler视图中的项目
这是列表项的XML。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cont_item_root"
android:layout_width="match_parent"
android:layout_height="85dp"
android:background="@drawable/background_state_drawable"
android:clickable="true"
>
<ImageView
android:id="@+id/im_item_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:src="@mipmap/ic_tonality_black_36dp"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:id="@+id/lbl_item_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/im_item_icon"
android:layout_marginLeft="72dp"
android:layout_marginRight="48dp"
android:ellipsize="end"
android:fontFamily="sans-serif"
android:singleLine="true"
android:text="Sois comme l'eau mon ami"
android:textColor="@android:color/black"
android:textSize="16sp" />
<TextView
android:id="@+id/lbl_item_sub_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/lbl_item_text"
android:layout_marginLeft="72dp"
android:layout_marginRight="48dp"
android:ellipsize="end"
android:fontFamily="sans-serif"
android:singleLine="true"
android:text="Mononc' J"
android:textSize="14sp" />
<ImageView
android:id="@+id/im_item_icon_secondary"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:padding="16dp"
android:src="@mipmap/ic_star_border_black_24dp"
android:background="@drawable/background_state_drawable"
/>
</RelativeLayout>
适配器中的嵌套类为我处理点击事件。
class DerpHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
private TextView title;
private TextView subTitle;
private ImageView thumbnail;
private ImageView secondaryIcon;
private View container;
public DerpHolder(View itemView) {
super(itemView);
title = (TextView)itemView.findViewById(R.id.lbl_item_text);
subTitle = (TextView)itemView.findViewById(R.id.lbl_item_sub_title);
thumbnail = (ImageView)itemView.findViewById(R.id.im_item_icon);
secondaryIcon = (ImageView)itemView.findViewById(R.id.im_item_icon_secondary);
container = (View)itemView.findViewById(R.id.cont_item_root);
container.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Log.w("RecyclerView","Item with id : " + v.getId() + " touched");
if(v.getId() == R.id.cont_item_root)
{
Log.w("RecyclerView","list item clicked");
itemClickCallback.onItemClick(getAdapterPosition());
}
else
{
Log.w("RecyclerView","star clicked");
itemClickCallback.onSecondaryIconClick(getAdapterPosition()); //not able to come here
}
}
}
我能够进入if
的第一部分,也就是我能够接受的listItem点击的点击事件。然而,当用户点击星号时,它也被视为整个列表项被点击,因为星星位于容器内。
我怎样才能单独接收星星上的点击,使点击星号不被视为点击列表项目?
编辑
添加行android:descendantFocusability="blocksDescendants"
在列表项的RelativeLayout
固定的问题。但任何人都可以解释它是如何修复它的。按名称,它预计会阻止后代并吃点击事件。但是,这种行为是相反的。
[ListView中的按钮不可点击]的可能重复(http://stackoverflow.com/questions/20709755/button-inside-listview-not-clickable) –
或更好... http://stackoverflow.com/ 30284067/handle-button-click-in-row-in-recyclerview –