响应按钮单击RecyclerView

时间:2016-08-22 08:08:55

标签: android android-recyclerview recyclerview-layout

我有一个RecyclerView,用户必须点击这些元素才能对该特定播放器投票。

当前布局

Current Layout

由于它不是那么直观,我想在每个元素的右侧添加Button以让用户了解他是否需要点击投票。

问题

如何制作这样的自定义layout?可能使用GridLayout?主要是,当点击按钮(仅限按钮)时,如何获取Button element position

代码

2 个答案:

答案 0 :(得分:0)

您可以使用 LinearLayout Recyclerview 项添加按钮,为其提供权重

您可以在ViewHolder类中处理该按钮的 onClicklistener ,您可以通过 ViewHolder 类中的 getAdapterPosition()获取点击按钮的位置。

根据您的要求:

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="5">

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:text="ABCD"/>

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:text="A"/>

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Vote"/>

</LinearLayout>

适配器:

public class Holder extends RecyclerView.ViewHolder{
        Button  btnVote;
        public Holder(View itemView) {
            super(itemView);
            btnVote = (Button) itemView.findViewById(R.id.btn_vote);

            btnVote.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //list.get(getAdapterPosition()); Use for get the data on selected item
                }
            });
        }
    }

答案 1 :(得分:0)

用此替换您的CoursesAdapter的onBindViewHolder。

 @Override
    public void onBindViewHolder(CoursesViewHolder holder, int position) {
        Player player = mArrayCourses.get(position);
        holder.name.setText(player.getName());
        holder.counter.setText(String.valueOf(player.getCount()));
        holder.voteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Do your work here
            }
        });

    }