-1

RecyclerViewユーザーが要素をクリックして、その特定のプレーヤーに投票する必要がある場所があります。


現在のレイアウト

現在のレイアウト


あまり直感的ではないのでButton、各要素の右側に s を追加して、ユーザーが投票したい場合はクリックする必要があることを理解できるようにしたいと思います。


質問

そんなカスタムどうしようlayout。おそらくGridLayout?そしてほとんどの場合、ボタン (およびそれのみ) がクリックされたときにButton's element'sを取得するにはどうすればよいですか?position


コード

4

2 に答える 2

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
            }
        });

    }
于 2016-08-22T08:39:32.983 に答える
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
                }
            });
        }
    }
于 2016-08-22T08:22:55.280 に答える