Onclicklistener On Recylerview And Getting The Id Of Clicked Item
I need to set onClickListener on RecyclerView which gets the Json Id of an Item Clicked and redirects to the fragment which displays the details of the product based on that Json I
Solution 1:
@Override
publicvoidonBindViewHolder(MyViewHolder holder, int position) {
holder.name.setText(ads.get(position).getTitle());
holder.details.setText("Rs. " +ads.get(position).getPrice().toString()+ "/-"); Glide.with(context).load(ads.get(position).getPhoto1()).into(holder.thumbnail);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
publicvoidonClick(View view) {
String id=ads.get(position).getId();
//You can call detail fragment here
}
});
}
Note: Remove onclick listener from ViewHolder
Solution 2:
try this using below class you can get recyclerview onclick listener and longclick listneeers
create a RecyclerItemClickListener class
publicclassRecyclerItemClickListenerimplementsRecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
publicinterfaceOnItemClickListener {
publicvoidonItemClick(View view, int position);
publicvoidonLongItemClick(View view, int position);
}
GestureDetector mGestureDetector;
publicRecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = newGestureDetector(context, newGestureDetector.SimpleOnGestureListener() {
@OverridepublicbooleanonSingleTapUp(MotionEvent e) {
returntrue;
}
@OverridepublicvoidonLongPress(MotionEvent e) {
Viewchild= recyclerView.findChildViewUnder(e.getX(), e.getY());
if (child != null && mListener != null) {
mListener.onLongItemClick(child, recyclerView.getChildAdapterPosition(child));
}
}
});
}
@OverridepublicbooleanonInterceptTouchEvent(RecyclerView view, MotionEvent e) {
ViewchildView= view.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
returntrue;
}
returnfalse;
}
@OverridepublicvoidonTouchEvent(RecyclerView view, MotionEvent motionEvent) {
}
@OverridepublicvoidonRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
}
now add lister to recyclerview like this
indexRecyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(MainActivity.this, indexRecyclerView, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
/// perform your action here
}
@Override
public void onLongItemClick(View view, int position) {
}
})
);
ask me in case of any query
Solution 3:
Try this:
itemView.setOnClickListener(newView.OnClickListener() {
@OverridepublicvoidonClick(View v) {
int position = getLayoutPosition();
String id=ads.get(position).getId();
// call fragment
}
}
Add this in ViewHolder Constructor.
Solution 4:
You can add Ad ad = ads.get(RecyclerAdapter.MyViewHolder.this.getAdapterPosition());
in your OnCkick method to retrieve the current object. Then use Interface to pass the value to the fragment.
@OverridepublicvoidonClick(View view) {
Toast.makeText(view.getContext(), "Clicked on Recycler View" , Toast.LENGTH_SHORT).show();
Adad= ads.get(RecyclerAdapter.MyViewHolder.this.getAdapterPosition());
//use interface to pass ad to the fragment....
}
Solution 5:
Your adapter class should be like below.
You have to remove onClickListener
from ViewHolder
class. and set click in onBindViewHolder
Method.
publicclassRecyclerAdapterextendsRecyclerView.Adapter<RecyclerAdapter.MyViewHolder>{
private List<Ad> ads;
private Context context;
publicRecyclerAdapter(List<Ad> ads, Context context){
this.ads=ads;
this.context=context;
}
@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item_ads, parent,false);
returnnewMyViewHolder(view);
}
@OverridepublicvoidonBindViewHolder(MyViewHolder holder, int position) {
holder.name.setText(ads.get(position).getTitle());
holder.details.setText("Rs. " +ads.get(position).getPrice().toString()+ "/-");
// Glide.with(context).load(ads.get(position).getPhoto1()).into(holder.thumbnail);
holder.linearLayout.setOnClickListener(newView.OnClickListener() {
@OverridepublicvoidonClick(View view) {
/*Write your code here to send data to fragment*/Adad= ads.get(position);
}
});
}
@OverridepublicintgetItemCount() {
return ads.size();
}
publicstaticclassMyViewHolderextendsRecyclerView.ViewHolder{
ImageView thumbnail;
TextView name, details;
LinearLayout linearLayout;
publicMyViewHolder(View itemView) {
super(itemView);
// thumbnail=(ImageView)itemView.findViewById(R.id.thumbnail);
name=(TextView)itemView.findViewById(R.id.title);
details=(TextView)itemView.findViewById(R.id.price);
linearLayout=(TextView)itemView.findViewById(R.id.linearLayout); // its your main layout
}
}
}
Post a Comment for "Onclicklistener On Recylerview And Getting The Id Of Clicked Item"