我有一个recycleView(参见图片)。您也会看到2个按钮。这是布局file.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="80dp"
android:background="@color/white">


  <de.hdodenhof.circleimageview.CircleImageView
      android:layout_marginLeft="10dp"
      android:id="@+id/main_picture"
      android:layout_width="45dp"
      android:layout_height="50dp"
      android:src="@drawable/pfl_img"
      android:layout_centerVertical="true"
      android:layout_alignParentStart="true" />


<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_toRightOf="@id/main_picture"
    android:layout_marginRight="5dp"
    android:layout_marginLeft="10dp"
    android:id="@+id/relativeLayout2">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Edem Palonik"
        android:textSize="17sp"
        android:id="@+id/textName"
        android:textColor="@color/black"
        android:layout_above="@+id/textDescription"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Profession and ..."
        android:textColor="@color/black"
        android:textSize="17sp"
        android:id="@+id/textDescription"
        android:layout_centerVertical="true"
        android:layout_alignParentStart="true" />

    <ImageView
        android:layout_width="20dp"
        android:layout_height="18dp"
        android:layout_marginTop="2dp"
        android:layout_below="@+id/textDescription"
        android:id="@+id/historyIcon"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_marginLeft="5dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/date"
        android:textSize="14sp"
        android:text="17/12/2017/13:46"
        android:layout_marginTop="2dp"
        android:layout_below="@+id/textDescription"
        android:layout_toEndOf="@+id/historyIcon" />
</RelativeLayout>

<Button
    android:id="@+id/call_button"
    android:layout_width="32dp"
    android:layout_height="32dp"
    android:layout_marginRight="10dp"
    android:background="@drawable/call_img"
    android:layout_centerVertical="true"
    android:layout_toStartOf="@+id/sms_button" />

<Button
    android:id="@+id/sms_button"
    android:layout_width="37dp"
    android:layout_height="32dp"
    android:background="@drawable/sms_img"
    android:layout_alignTop="@+id/call_button"
    android:layout_alignParentEnd="true" />

<View
    android:layout_width="match_parent"
    android:layout_height="0.8dp"
    android:layout_alignParentBottom="true"
    android:background="@color/gray" />

我知道,我可以使用recyclerViewItemCLickListener,但是我想分别单击最后两个按钮,所以我该怎么办?

因此,我想单独单击最后一个按钮,而不单击所有行,我只希望最后一个按钮是可单击的。

这是Java代码。
public class ConnectionsFragment extends Fragment {
private View mainView;
private RecyclerView recyclerView;
private List<Connections_item> list;
private Button call, sms;

public ConnectionsFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mainView = inflater.inflate(R.layout.connections_fragment, container, false);
    recyclerView = (RecyclerView) mainView.findViewById(R.id.recycler_connection);
    ConnectionsAdapter adapter = new ConnectionsAdapter(getActivity(), list);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setAdapter(adapter);

    init(mainView);
    return mainView;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    list = new ArrayList<>();
    list.add(new Connections_item(R.drawable.pfl_img, "Anun Azganun1", "Inch vor text", R.drawable.missed, "23/11/1998 00:00"));
    list.add(new Connections_item(R.drawable.pfl_img, "Anun Azganun2", "Inch vor text", R.drawable.callagain, "24/11/1998 01:00"));
    list.add(new Connections_item(R.drawable.pfl_img, "Anun Azganun3", "Inch vor text", R.drawable.missed, "25/11/1998 02:00"));


public void init(View v) {
    call = (Button) v.findViewById(R.id.call_button);
    sms = (Button) v.findViewById(R.id.sms_button);

//        call.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                Toast.makeText(getActivity(), "Whom you wanna call?", Toast.LENGTH_SHORT).show();
//            }
//        });

//        sms.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                Toast.makeText(getActivity(), "Whom you wanna send sms?", Toast.LENGTH_SHORT).show();
//            }
//        });
    }
}

这是适配器代码。
public class ConnectionsAdapter extends RecyclerView.Adapter<ConnectionsAdapter.MyViewHolder> {

Context context;
List<Connections_item> list = new ArrayList<>();

public ConnectionsAdapter(Context context, List<Connections_item> list) {
    this.context = context;
    this.list = list;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v;
    v = LayoutInflater.from(context).inflate(R.layout.connections_view_item, parent, false);
    MyViewHolder holder = new MyViewHolder(v);
    return holder;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    holder.mainImage.setImageResource(list.get(position).getMainImage());
    holder.fullName.setText(list.get(position).getFullName());
    holder.description.setText(list.get(position).getDescription());
    holder.historyImage.setImageResource(list.get(position).getHistoryIcon());
    holder.date.setText(list.get(position).getDate());

}

@Override
public int getItemCount() {
    return list.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder {

    ImageView mainImage, historyImage;
    TextView fullName, description, date;
    Button call, sms;

    public MyViewHolder(View v) {
        super(v);

        mainImage = (ImageView) v.findViewById(R.id.main_picture);
        historyImage = (ImageView) v.findViewById(R.id.historyIcon);
        fullName = (TextView) v.findViewById(R.id.textName);
        description = (TextView) v.findViewById(R.id.textDescription);
        date = (TextView) v.findViewById(R.id.date);
        call = (Button) v.findViewById(R.id.call_button);
        sms = (Button) v.findViewById(R.id.sms_button);

    }
  }
}

最佳答案

由于适配器包含recyclerView项目,并且按钮位于项目中
因此与按钮有关的所有代码都将仅在适配器中。

在适配器中修改代码:

@Override

    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.mainImage.setImageResource(list.get(position).getMainImage());
        holder.fullName.setText(list.get(position).getFullName());
        holder.description.setText(list.get(position).getDescription());
        holder.historyImage.setImageResource(list.get(position).getHistoryIcon());
        holder.date.setText(list.get(position).getDate());

        holder.call.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                   Toast.makeText(getActivity(), "Whom you wanna call?", Toast.LENGTH_SHORT).show();
                }
           });

        holder.sms.setOnClickListener(new View.OnClickListener() {
               @Override
                public void onClick(View view) {
                    Toast.makeText(getActivity(), "Whom you wanna send sms?",                                }
            });

    }

在java文件中,只需删除call和sms按钮的初始化和列表器即可。

10-07 19:15
查看更多