簡體   English   中英

如何在RecyclerView.Adapter中獲得卡片位置?

[英]how to get a card position in RecyclerView.Adapter?

請幫我解決一個問題。 問題是我需要獲得卡位置才能將該位置傳達給另一個活動。 當我按下卡上的按鈕時,我需要轉移這個位置。 如何獲得卡位置?

RVAdapter.java

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {

    private final static String myLog = "myLog";


    List<ItemsOfRow> items;
    private Context context;


    RVAdapter(List<ItemsOfRow> items, Context context) {
        this.items = items;
        this.context = context;
    }

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

    @Override
    public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_view, viewGroup, false);
        PersonViewHolder pvh = new PersonViewHolder(v);
        return pvh;
    }

    @Override
    public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {


        personViewHolder.imgGroupImage.setImageBitmap(items.get(i).getTitleImage());
        personViewHolder.txtTitleGroup.setText(items.get(i).getTitleName());
        personViewHolder.txtContentGroup.setText(items.get(i).getTitleContent());


        personViewHolder.btnShare.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent sendIntent = new Intent();
                sendIntent.setAction(Intent.ACTION_SEND);
                sendIntent.putExtra(Intent.EXTRA_TEXT, items.get(????).getTitleContent());
                sendIntent.setType("text/plain");
                context.startActivity(sendIntent);
            }
        });

        personViewHolder.btnLearnMore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(context, QuoteActivity.class);
                intent.putExtra("title",items.get(?????).getTitleName());
                intent.putExtra("positionGroup", ?????? + "");
                view.getContext().startActivity(intent);
            }
        });

    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    public static class PersonViewHolder extends RecyclerView.ViewHolder{

        CardView cv;

        TextView txtTitleGroup;
        TextView txtContentGroup;

        ImageView imgGroupImage;

        Button btnShare;
        Button btnLearnMore;


        PersonViewHolder(final View itemView) {
            super(itemView);



            cv = (CardView) itemView.findViewById(R.id.cv);

            imgGroupImage = (ImageView) itemView.findViewById(R.id.img_group_image);
            txtTitleGroup = (TextView) itemView.findViewById(R.id.txt_title_group);
            txtContentGroup = (TextView) itemView.findViewById(R.id.txt_content_group);


            btnShare = (Button) itemView.findViewById(R.id.btn_share_group);
            btnLearnMore = (Button) itemView.findViewById(R.id.btn_learn_more);


        }
    }
}

您可以使用getAdapterPosition()方法

onBindViewHolder()的第二個參數int i實際上是將要創建的卡的位置。 您可以將i傳達給您。

在您的onBindViewHolder

@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {

    /* rest of your code */

    personViewHolder.btnLearnMore.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(context, QuoteActivity.class);
            intent.putExtra("title",items.get(i).getTitleName());
            intent.putExtra("positionGroup", i);
            view.getContext().startActivity(intent);
        }
    });
}
recyclerView.getChildLayoutPosition(child)

這將返回視圖在回收者視圖中的位置。 這里child是注冊click事件的View。

完整點擊偵聽器代碼可以類似於:

            gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }

            @Override
            public void onLongPress(MotionEvent e) {
                View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
                if (child != null && clickListener != null) {
                    clickListener.onLongClick(child, recyclerView.getChildLayoutPosition(child));
                }
            }
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM