这不是我第一次为RecyclerView实现适配器,所以我不理解此问题。
我有一个使用自定义列表项填充项目的回收站视图 我还设置了Viewholder itemView.setOnClickListener,当我单击该项目时,它不会注册该点击。
但是,当我单击项目文本上方的一点时,它记录了单击...也许与我的自定义项目布局有关?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.v7.widget.CardView
android:id="@+id/cardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/spacing_small"
android:layout_marginRight="@dimen/spacing_small"
android:layout_marginTop="@dimen/spacing_small">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/spacing_large"
android:clickable="true"
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Plan ID:" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Username:" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Timestamp:" />
</LinearLayout>
<View
android:layout_width="@dimen/spacing_medium"
android:layout_height="0dp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:id="@+id/plan_id_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/username_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/timestamp_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<ImageButton
android:id="@+id/options"
android:layout_width="wrap_content"
android:layout_height="@dimen/spacing_xlarge"
android:background="?attr/selectableItemBackgroundBorderless"
android:tint="@color/grey_40"
app:srcCompat="@drawable/ic_more_vert" />
<View
android:layout_width="@dimen/spacing_small"
android:layout_height="0dp" />
</LinearLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
这是我的适配器:
@Override
public void onClick(View v) {
final TextView timestamp_tv = v.findViewById(R.id.timestamp_tv);
switch (form_name) {
case "daily_worksheet":
Bundle bundle = new Bundle();
bundle.putString("timestamp", timestamp_tv.getText().toString());
new LoadActivityTask((Activity) context, new Intent(context, DailyWorksheet_View.class), "Daily Worksheet Form", bundle).execute();
break;
default:break;
}
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView plan_id, username, timestamp;
private ImageView options;
public ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(ReceiptAdapter.this);
plan_id = (TextView) itemView.findViewById(R.id.plan_id_tv);
username = (TextView) itemView.findViewById(R.id.username_tv);
timestamp = (TextView) itemView.findViewById(R.id.timestamp_tv);
options = (ImageView) itemView.findViewById(R.id.options);
}
}
答案 0 :(得分:1)
我认为错误是因为您在布局的根目录上设置了OnClickListener,而您的CardView(基本上是布局的主要背景)是不可点击的,因此影响OnClicklistener的唯一空间是CardView。
我认为您应该在Cardview上设置OnClicklistener(并设置为可点击)。
itemView.findViewById(R.id.cardView).setOnClickListener(ReceiptAdapter.this);
答案 1 :(得分:0)
尝试在第一个LinearLayout中删除android:clickable =“ true”:
Runtime.exec()