CardView中的按钮没有对itemView点击

时间:2017-11-01 13:13:17

标签: android button android-recyclerview cardview

这是我的item.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView 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:layout_marginLeft="@dimen/card_side_margin"
    android:layout_marginRight="@dimen/card_side_margin"
    app:cardCornerRadius="16dp"
    app:cardElevation="8dp"
    app:cardPreventCornerOverlap="false"
    app:cardUseCompatPadding="true">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <com.makeramen.roundedimageview.RoundedImageView
                android:id="@+id/image"
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:scaleType="centerCrop"
                app:riv_corner_radius_top_left="16dp"
                app:riv_corner_radius_top_right="16dp"
                tools:src="@drawable/anne_kalbi" />

            <View
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:background="@drawable/top_rounded_rect" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginTop="16dp"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/title"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="5dp"
                    android:textColor="@color/white"
                    android:textSize="@dimen/item_poem_title_size"
                    tools:text="Anne Kalbi" />

                <TextView
                    android:id="@+id/poet"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="5dp"
                    android:textColor="@color/white"
                    android:textSize="@dimen/item_poem_poet_size"
                    tools:text="Şair: Mehmet Çağan" />

            </LinearLayout>

        </FrameLayout>


        <Button
            android:id="@+id/listenBtn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/bottom_rounded_rect"
            android:gravity="center"
            android:text="@string/listen"
            android:textColor="#fff" />


    </LinearLayout>

</android.support.v7.widget.CardView>

这里是我将onClickListener添加到RecyclerView适配器的onBindViewHolder中的itemView的地方:

holder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (itemListener != null)
            itemListener.onItemClicked(item, position);
        }
    });
}

然而,图像部分对点击作出反应但按钮没有反应。它们都在itemView内部,那么停止按钮的反应是什么?

1 个答案:

答案 0 :(得分:0)

我已经这样做了

@Override
public void onBindViewHolder(ViewHolder holder, int position) {

    final CustomerOrderSetterClass current = orderSetterClassHashMap.get(position);
    holder.setClickListener(new ItemClickListener() {
        @Override
        public void onClick(View view, int position, boolean isLongClick) {
          /*  Intent i = new Intent(context, CustomerDetailsActivity.class);
            b.putString("Sno", current.getSno());
            i.putExtras(b);
            context.startActivity(i);*/
            showDeliveryInfoAlert();

        }
    });

    holder.delivery_date.setText(current.getDate());
    holder.order_can.setText(current.getNoofcane());
    holder.order_status.setText(current.getStatus());
    if (current.getStatus().equalsIgnoreCase("New Order"))
        holder.order_status.setTextColor(Color.RED);
    else
        holder.order_status.setTextColor(Color.GREEN);


}

private void showDeliveryInfoAlert() {

    final Dialog dialog = new Dialog(context);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

    LayoutInflater lf = (LayoutInflater) (context)
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View dialogview = lf.inflate(R.layout.delivery_driver_details, null);

    dialog.setContentView(dialogview);
    WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
    lp.copyFrom(dialog.getWindow().getAttributes());
    lp.width = ViewGroup.LayoutParams.MATCH_PARENT;
    lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
    lp.gravity = Gravity.CENTER;

    dialog.getWindow().setAttributes(lp);
    dialog.show();
    TextView cancel = (TextView) dialogview
            .findViewById(R.id.dialogCancel);
    cancel.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            dialog.dismiss();
        }
    });


}

class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public TextView delivery_date, order_can,order_status;
    public Button edit;
    private ItemClickListener clickListener;
    public ViewHolder(View itemView) {
        super(itemView);
        itemView.setTag(itemView);
        itemView.setOnClickListener(this);
        delivery_date = (TextView) itemView.findViewById(R.id.date);
        order_can = (TextView) itemView.findViewById(R.id.noofcane);
        order_status= (TextView) itemView.findViewById(R.id.status);

    }
    public void setClickListener(ItemClickListener itemClickListener) {
        this.clickListener = itemClickListener;
    }


    @Override
    public void onClick(View v) {

       clickListener.onClick(v, getPosition(), false);


    }
}

将此界面添加到您的包中

public interface ItemClickListener {
    void onClick(View view, int position, boolean isLongClick);

}