2016-06-11 16 views
5

Tôi đã có RecyclerView.ViewHolder và RecyclerView.Adapter, tôi cần sau khi nhấp vào mục và sau đó gửi thông tin về mục này đến một mục khác Activity.onClickListener trong RecyclerView.ViewHolder

PlacesAdapter.java

public class PlacesAdapter extends RecyclerView.Adapter<PlacesViewHolder> { 
private PlacesActivity placesActivity; 

    Context context; 
    private int position; 
    List<Places> places; 

    public PlacesAdapter(List<Places> places) { 
     this.places = places;} 

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

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

    @Override 
    public void onBindViewHolder(PlacesViewHolder personViewHolder, int i) { 
     personViewHolder.name.setText(places.get(i).name); 
     personViewHolder.address.setText(places.get(i).address); 
     Picasso.with(personViewHolder.itemView.getContext()) 
       .load(places.get(i).photo) 
       .into(personViewHolder.getPhoto()); 
     } 

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

} 

PlacesViewHolder.java

Trong dòng này "intent.putExtra(PlacesDetail.PLACES_NAME,);" Làm thế nào tôi có thể gửi tên?

public class PlacesViewHolder extends RecyclerView.ViewHolder { 

    CardView cv; 
    public TextView name; 
    public TextView address; 
    public ImageView photo; 
    public PlacesViewHolder(final View itemView) { 
     super(itemView); 
     cv = (CardView)itemView.findViewById(R.id.cv); 
     name = (TextView)itemView.findViewById(R.id.person_name); 
     address = (TextView)itemView.findViewById(R.id.person_age); 
     photo = (ImageView)itemView.findViewById(R.id.person_photo); 

     itemView.setOnClickListener(new View.OnClickListener(){ 

      @Override 
      public void onClick(View v) { 
       Context context = v.getContext(); 
       Intent intent = new Intent(context, PlacesDetail.class); 
       intent.putExtra(PlacesDetail.PLACES_NAME,); 
       context.startActivity(intent); 
      } 
     }); 

    } 

    public TextView getAddress() { 
     return address; 
    } 

    public TextView getName() { 
     return name; 
    } 
    public ImageView getPhoto() { 
     return photo; 
    } 
} 
+0

một cách đơn giản 'nơi 'mục dưới dạng trường vào trình xem. –

+0

Cách khác là lấy vị trí mục từ trình xem và nhận mục từ các địa điểm –

+0

sử dụng chế độ xem thẻ sau đó nhận giá trị trên thẻViewView.setOnClickListener (Chế độ xem mới.OnClickListener() và vượt qua các giá trị thông qua sharedpreference hoặc ý định bất cứ điều gì bạn muốn –

Trả lời

0

Bạn có thể đạt được điều này bằng cách tạo ra một giao diện bên trong bộ chuyển đổi của bạn cho một itemclicklistener và sau đó bạn có thể thiết lập onItemClickListener từ PlacesActivity của bạn.

Một nơi nào đó bên trong bạn PlacesAdapter bạn sẽ cần những điều sau đây:

private onRecyclerViewItemClickListener mItemClickListener; 

public void setOnItemClickListener(onRecyclerViewItemClickListener mItemClickListener) { 
     this.mItemClickListener = mItemClickListener; 
    } 

    public interface onRecyclerViewItemClickListener { 
     void onItemClickListener(View view, int position, String places_name); 
    } 

Sau đó bên trong bạn ViewHolder (mà tôi đã thêm vào như là một lớp bên trong bộ chuyển đổi của tôi), bạn sẽ được áp dụng cho người nghe để các thành phần bạn' d như người sử dụng bấm, như vậy:

class PlacesViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     PlacesViewHolder(View view) { 
      super(view); 
      view.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      if (mItemClickListener != null) { 
       mItemClickListener.onItemClickListener(v, getAdapterPosition(), PlacesDetail.PLACES_NAME); 
      } 
     } 
    } 

Ví dụ này cho thấy một onClickListener được áp dụng cho xem bên trong PlacesViewHolder.

recyclerView.setAdapter(adapter);// set adapter on recyclerview 
      adapter.notifyDataSetChanged();// Notify the adapter 
      adapter.setOnItemClickListener(new PlacesAdapter.onRecyclerViewItemClickListener() { 
       @Override 
       public void onItemClickListener(View view, int position, String places_name) { 
//perform click logic here (places_name is passed) 
        } 
       }); 

Để triển khai mã này, bạn sẽ setOnItemClickListener vào bộ điều hợp bên trong PlacesActivity như được hiển thị ở trên.

1

Đây là ví dụ hoàn chỉnh về Bộ điều hợp tùy chỉnh nơi tôi có thể lấy chi tiết của các mục cụ thể. Trong MainActivity bạn cần phải thiết lập adapter:

adapter = new MyAdapter(getApplicationContext(), account_no, title, aFN1, aLN1,aFN2, aLN2,aFN3, aLN3,isavilable,waitlist,flag); 
          adapter.notifyDataSetChanged(); 
          mRecyclerView.setAdapter(adapter); 

Bây giờ xem mã cho Adapter tùy chỉnh:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 
    String TAG = "MyAdapter"; 
    Context context; 
    private String[] accountNo; 
    private String[] title; 
    private String[] afn1; 
    private String[] aln1; 
    private String[] afn2; 
    private String[] aln2; 
    private String[] afn3; 
    private String[] aln3; 
    private String[] isAvailable; 
    private String[] waitlist; 
    private int flag; 
public static class ViewHolder extends RecyclerView.ViewHolder { 
     public TextView account_no,title,afn1,afn2,aln1,aln2,color,is_available; 
     private ImageView img_android; 
     CardView cardView; 
     public ViewHolder(CardView v) { 
      super(v); 
      account_no = (TextView)v.findViewById(R.id.acctno); 
      title = (TextView)v.findViewById(R.id.title); 
      afn1 = (TextView) v.findViewById(R.id.afn1); 
      cardView = v; 
     } 
    } 
    // Provide a suitable constructor (depends on the kind of dataset) 
    public MyAdapter(Context context, String[] accountNo,String[] title,String[] afn1,String[] aln1,String[] afn2,String[] aln2,String[] afn3,String[] aln3,String[] isAvailable, String[] waitlist,int flag) { 
     this.context = context; 
     this.accountNo = accountNo; 
     this.title = title; 
     this.afn1 = afn1; 
     this.aln1 = aln1; 
     this.afn2 = afn2; 
     this.aln2 = aln2; 
     this.afn3 = afn3; 
     this.aln3 = aln3; 
     this.isAvailable = isAvailable; 
     this.waitlist = waitlist; 
     this.flag = flag; 
     Log.d(TAG,afn1.toString() +aln1+afn2+aln2+afn3+aln3.toString()+waitlist); 
    } 
    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) { 
     CardView cv = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false); 
     return new ViewHolder(cv); 
    } 
    @Override 
    public void onBindViewHolder(final ViewHolder holder, final int position) { 
     final CardView cardView = holder.cardView; 
     final TextView accountno = (TextView)cardView.findViewById(R.id.acctno); 
     accountno.setText(accountNo[position]); 
     final TextView titletxt = (TextView)cardView.findViewById(R.id.title); 
     titletxt.setText(title[position]); 
     final TextView afn1txt = (TextView) cardView.findViewById(R.id.afn1); 
     afn1txt.setText(afn1[position]+" "+aln1[position]); 
     Log.d(TAG,waitlist[position]); 
     cardView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       int id = getItemViewType(position); 
       SharedPreferences sharedPreferences = context.getSharedPreferences(Constant.MYPREFERENCE,Context.MODE_PRIVATE); 
       SharedPreferences.Editor edit = sharedPreferences.edit(); 
       edit.putString(Constant.ACCOUNT,accountNo[position]); 
       edit.putString(Constant.TITLE,title[position]); 
       edit.putString(Constant.AFN1,afn1[position]); 
       edit.putString(Constant.ALN1,aln1[position]); 
       edit.putString(Constant.AFN2,afn2[position]); 
       edit.putString(Constant.ALN2,aln2[position]); 
       edit.putString(Constant.AFN3,afn3[position]); 
       edit.putString(Constant.ALN3,aln3[position]); 
       edit.putBoolean(Constant.IS_AVAILABLE, Boolean.parseBoolean(isAvailable[position].toUpperCase())); 
       edit.putString(Constant.WAITLIST,waitlist[position]); 
       Log.d("WaitingNo2 :",""+String.valueOf(waitlist[position])); 
       edit.commit(); 
       Intent intent = new Intent(v.getContext(), DetailsActivity.class); 
       v.getContext().startActivity(intent); 
      } 
     }); 
    } 

    // Return the size of your dataset (invoked by the layout manager) 
    @Override 
    public int getItemCount() { 
     return accountNo.length; 
    } 
} 

Sau Tất cả những gì có được giá trị từ sharedPreferences trong Hoạt động đó được gọi là trên Thẻ Bấm:

preferences = getSharedPreferences("myshared", Context.MODE_PRIVATE); 
AccountNo = sharedPreferences.getString(Constant.ACCOUNT,null).toUpperCase(); 
      title = sharedPreferences.getString(Constant.TITLE,null).toUpperCase(); 
      afn1 = sharedPreferences.getString(Constant.AFN1,null).toUpperCase(); 
      aln1 = sharedPreferences.getString(Constant.ALN1,null).toUpperCase(); 
      afn2 = sharedPreferences.getString(Constant.AFN2,null).toUpperCase(); 
      aln2 = sharedPreferences.getString(Constant.ALN2,null).toUpperCase(); 
      afn3 = sharedPreferences.getString(Constant.AFN3,null).toUpperCase(); 
      aln3 = sharedPreferences.getString(Constant.ALN3,null).toUpperCase(); 
      isAvailable = sharedPreferences.getBoolean(Constant.IS_AVAILABLE,isAvailable); 
      waitlist = sharedPreferences.getString(Constant.WAITLIST,waitlist); 

Bây giờ, hãy làm bất cứ điều gì bạn muốn và thưởng thức mã.

-1

thử này, nó làm việc với tôi một cách chính xác

Tạo một lớp mới và mã này

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { 
private OnItemClickListener mListener; 

public interface OnItemClickListener { 
    public void onItemClick(View view, int position); 

    public void onLongItemClick(View view, int position); 
} 

GestureDetector mGestureDetector; 

public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) { 
    mListener = listener; 
    mGestureDetector = 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 && mListener != null) { 
       mListener.onLongItemClick(child, recyclerView.getChildAdapterPosition(child)); 
      } 
     } 
    }); 
} 

@Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { 
    View childView = view.findChildViewUnder(e.getX(), e.getY()); 
    if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { 
     mListener.onItemClick(childView, view.getChildAdapterPosition(childView)); 
     return true; 
    } 
    return false; 
} 

@Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { } 

@Override 
public void onRequestDisallowInterceptTouchEvent (boolean disallowIntercept){} 
} 

Và trong hoạt động của bạn thêm video này vào thực hiện bộ chuyển đổi của bạn

mRecyclerView.addOnItemTouchListener(
    new RecyclerItemClickListener(getActivity(), mRecyclerView, new RecyclerItemClickListener.OnItemClickListener() { 
@Override 
public void onItemClick(View view, int position) { 
    // do something 
    } 
    } 
    } 

@Override 
public void onLongItemClick(View view, int position) { 
    // do whatever 
    } 
    }) 
    ); 
+0

@Alice kiểm tra câu trả lời của tôi –

Các vấn đề liên quan