【问题标题】:how to get a card position in RecyclerView.Adapter?如何在 RecyclerView.Adapter 中获取卡片位置?
【发布时间】:2017-01-24 12:00:02
【问题描述】:

请帮我解决一个问题。问题是我需要获取卡片位置才能将此位置传达给另一个 Activity。当我按下卡上的按钮时,我需要转移这个位置。如何获得卡位?

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


        }
    }
}

【问题讨论】:

标签: android android-studio android-recyclerview android-cardview


【解决方案1】:

您可以使用 viewHolder 的方法getAdapterPosition()

【讨论】:

  • 谢谢,它帮助了我。
  • @VladislavBuryakinBeowulF 如果正确,请接受答案
【解决方案2】:

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

【讨论】:

    【解决方案3】:
    recyclerView.getChildLayoutPosition(child)
    

    这将返回视图在回收站视图中的位置。 这里的child是注册点击事件的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));
                    }
                }
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多