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

, ** 내가 ** 카드 위치입니다. –

+0

@RahulSharma, 문서 (https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html)는 명시 적으로이 매개 변수를이 용도로 사용하면 안됨을 명시합니다. – 0xDEADC0DE

답변

4

에서

+0

감사합니다. 나를. –

+0

@VladislavBuryakinBeowulF 정답이라면 대답 해주세요. –

0

onBindViewHolder()int i 실제로 생성 될 예정 카드의 위치 인 제 2 파라미터. 당신은 당신의 의도에 i을 전달할 수 있습니다. 당신은 당신의 viewHolder의 방법 getAdapterPosition()를 사용할 수 있습니다 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) 

이는 재활용 뷰에서 뷰의 위치를 ​​반환합니다. 여기에서 child는 클릭 이벤트를 등록하는보기입니다.

전체 클릭 리스너 코드가 유사 할 수 : ** onBindViewHolder ** 방법 내부

  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)); 
       } 
      } 
     }); 
관련 문제