1

请帮我解决问题。问题是我需要获得卡位以将此位置传达给另一个活动。当我按下卡上的按钮时,我需要转移此位置。如何获得卡的位置?如何获得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); 


     } 
    } 
} 
+1

内** ** onBindViewHolder方法,** **我是你的卡位。 –

+0

@RahulSharma,文档(https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html)明确指出,您不应该为此使用该参数 – 0xDEADC0DE

回答

4

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

+0

谢谢,它帮助我。 –

+0

@ VladislavBuryakinBeowulF如果它正确,请接受答案,请 –

0

第二个参数的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); 
     } 
    }); 
} 
0
recyclerView.getChildLayoutPosition(child) 

这将返回在回收视图中的视图的位置。 这里的孩子是注册点击事件的视图。

一个完整的点击监听器的代码可以类似于:

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