OnClickListener在图像视图内部的回收器视图上无法在Android TV上运行
我有一个recycler视图,它的行被设置为(focusable=“true”),这样我就可以通过d-pad控件在焦点上设置它的行的动画,这很好。但是当我按enter键时,它并没有检测到点击recycler视图的子视图,这很烦人 我的回收器视图代码:OnClickListener在图像视图内部的回收器视图上无法在Android TV上运行,android,android-recyclerview,onclicklistener,android-tv,onfocus,Android,Android Recyclerview,Onclicklistener,Android Tv,Onfocus,我有一个recycler视图,它的行被设置为(focusable=“true”),这样我就可以通过d-pad控件在焦点上设置它的行的动画,这很好。但是当我按enter键时,它并没有检测到点击recycler视图的子视图,这很烦人 我的回收器视图代码: <android.support.v7.widget.RecyclerView android:id="@+id/featuredRecyclerView" android:layout_wid
<android.support.v7.widget.RecyclerView
android:id="@+id/featuredRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000000"
android:focusable="false"
android:clipChildren="false"
>
</android.support.v7.widget.RecyclerView>
注:我已经尝试了focusable=“真/假”、focusableInTouchMode=“真/假”、clickable=“真/假”的所有可能性android:genderantfocusability无处不在。您是否尝试过使用ImageButton而不是ImageView?是的,回收服务中的所有UI小部件的工作行为都不一样。您可以尝试将OnClickListener附加到@+id/卡上吗?使用@+id/卡尝试检查这是否对您有帮助。它将向您展示如何在RecyclerView.ViewHolder中添加OnClickListener。有关更多信息,请检查此SO问题和。此外,我在本文中还了解了如何使用RecyclerView,包括如何添加和配置RecyclerView,如何创建和理解ViewHolder和适配器,以及如何添加单击侦听器
<com.open.androidtvwidget.leanback.widget.OpenCardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card"
android:background="@color/white"
android:clipChildren="false"
android:clipToPadding="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="true"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:descendantFocusability="beforeDescendants"
>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
>
<ImageView
android:id="@+id/ivMovie"
android:layout_width="100dp"
android:layout_height="150dp"
android:scaleType="centerCrop"
android:background="@color/placeholder"
android:focusable="false"
android:focusableInTouchMode="false"
/>
<RelativeLayout
android:id="@+id/footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/linear_gradiant"
android:layout_alignRight="@+id/ivMovie"
android:layout_alignLeft="@+id/ivMovie"
android:layout_alignBottom="@+id/ivMovie">
<TextView
android:id="@+id/runtime_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1m"
android:textColor="#ffffff"
android:textSize="16sp"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:gravity="center"
android:layout_marginRight="3dp"
/>
</RelativeLayout>
</RelativeLayout>
</com.open.androidtvwidget.leanback.widget.OpenCardView>
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.ivMovie.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent go = new Intent(mContext,LoginActivity.class);
go.putExtra("movie", movie);
mContext.startActivity(go);
}
});
holder.card.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
v.animate().scaleX(1.2f).scaleY(1.2f).setDuration(300).start();
v.setElevation(20);
} else {
v.animate().scaleX(1.0f).scaleY(1.0f).setDuration(300).start();
v.setElevation(0);
}
}
});
}