如何在 javatechig 示例中添加 Recycler 项目 SetOnClickListener
How to add Recycler item SetOnClickListener in javatechig example
我正在尝试为此添加 onclicklistener RecyclerView
但我尝试了所有方法,但它不起作用!:
FeedItem:
public class FeedItem {
private String title;
private String thumbnail;
private String date;
private String tags;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getThumbnail() {
return thumbnail;
}
public void setThumbnail(String thumbnail) {
this.thumbnail = thumbnail;
}
public String getDate() {
return date;
}
public void getDate(String date) {
this.date = date;
}
public String getTags() {
return tags;
}
public void setTags(String tags) {
this.tags = tags;
}
}
FeedListRowHolder:
public class FeedListRowHolder extends RecyclerView.ViewHolder {
protected ImageView thumbnail;
protected TextView title;
protected TextView date;
protected TextView tags;
public FeedListRowHolder(View view) {
super(view);
this.thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
this.title = (TextView) view.findViewById(R.id.title);
this.date = (TextView) view.findViewById(R.id.date);
this.tags = (TextView) view.findViewById(R.id.tagsItems);
}
}
适配器:
public class MyRecyclerAdapter extends RecyclerView.Adapter<FeedListRowHolder> {
private List<FeedItem> feedItemList;
private Context mContext;
public MyRecyclerAdapter(Context context, List<FeedItem> feedItemList) {
this.feedItemList = feedItemList;
this.mContext = context;
}
@Override
public FeedListRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_row, null);
return new FeedListRowHolder(v);
}
@Override
public void onBindViewHolder(FeedListRowHolder feedListRowHolder, int i) {
FeedItem feedItem = feedItemList.get(i);
Picasso.with(mContext).load(feedItem.getThumbnail())
.error(R.drawable.placeholder)
.placeholder(R.drawable.placeholder)
.into(feedListRowHolder.thumbnail);
feedListRowHolder.title.setText(Html.fromHtml(feedItem.getTitle()));
feedListRowHolder.date.setText(Html.fromHtml(feedItem.getDate()));
feedListRowHolder.tags.setText(Html.fromHtml(feedItem.getTags()));
}
@Override
public int getItemCount() {
return (null != feedItemList ? feedItemList.size() : 0);
}
}
我们如何将 OnClickListener
添加到此 RecyclerView
?
谢谢
您可以像这样使 RecyclerItem
可点击
public class FeedListRowHolder extends RecyclerView.ViewHolder {
protected ImageView thumbnail;
protected TextView title;
protected TextView date;
protected TextView tags;
public FeedListRowHolder(View view) {
super(view);
this.thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
this.title = (TextView) view.findViewById(R.id.title);
this.date = (TextView) view.findViewById(R.id.date);
this.tags = (TextView) view.findViewById(R.id.tagsItems);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do you stuff here
}
});
}
}
您应该在 RecyclerView.ViewHolder 中实现 View.OnClickListener。如果您想收听整个项目,请单击。请参阅下面修改后的 viewholder class
public class FeedListRowHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
protected ImageView thumbnail;
protected TextView title;
protected TextView date;
protected TextView tags;
public FeedListRowHolder(View view) {
super(view);
this.thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
this.title = (TextView) view.findViewById(R.id.title);
this.date = (TextView) view.findViewById(R.id.date);
this.tags = (TextView) view.findViewById(R.id.tagsItems);
}
@Override
public void onClick(View v) {
}
}
让我们开始吧。如果你想要单独的视图点击然后注册每个按钮或视图点击到这个视图holder.For示例缩略图点击可以注册如下。
public class FeedListRowHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
protected ImageView thumbnail;
protected TextView title;
protected TextView date;
protected TextView tags;
public FeedListRowHolder(View view) {
super(view);
this.thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
this.thumbnail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
this.title = (TextView) view.findViewById(R.id.title);
this.date = (TextView) view.findViewById(R.id.date);
this.tags = (TextView) view.findViewById(R.id.tagsItems);
}
@Override
public void onClick(View v) {
}
}
有很多方法可以解决这个问题,但下面给出了其中一种
RecyclerView recyclerView = findViewById(R.id.recycler);
recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() {
@Override public void onItemClick(View view, int position) {
// do whatever
}
})
);
RecyclerItemClickListener 实现:
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
public void onItemClick(View view, int position);
}
GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
}
@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.getChildPosition(childView));
return true;
}
return false;
}
@Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }
}
Write on OnCreate method
recyclerview.addOnItemTouchListener(
new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
FeedItem bookScreenDateEntity = (FeedItem)yourList.get(position);
bookScreenDateEntity.getServiceid();
}
})
);
RecyclerItemClickListener class:
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
public void onItemClick(View view, int position);
}
GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
}
@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) {
}
}
我正在尝试为此添加 onclicklistener RecyclerView
但我尝试了所有方法,但它不起作用!:
FeedItem:
public class FeedItem {
private String title;
private String thumbnail;
private String date;
private String tags;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getThumbnail() {
return thumbnail;
}
public void setThumbnail(String thumbnail) {
this.thumbnail = thumbnail;
}
public String getDate() {
return date;
}
public void getDate(String date) {
this.date = date;
}
public String getTags() {
return tags;
}
public void setTags(String tags) {
this.tags = tags;
}
}
FeedListRowHolder:
public class FeedListRowHolder extends RecyclerView.ViewHolder {
protected ImageView thumbnail;
protected TextView title;
protected TextView date;
protected TextView tags;
public FeedListRowHolder(View view) {
super(view);
this.thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
this.title = (TextView) view.findViewById(R.id.title);
this.date = (TextView) view.findViewById(R.id.date);
this.tags = (TextView) view.findViewById(R.id.tagsItems);
}
}
适配器:
public class MyRecyclerAdapter extends RecyclerView.Adapter<FeedListRowHolder> {
private List<FeedItem> feedItemList;
private Context mContext;
public MyRecyclerAdapter(Context context, List<FeedItem> feedItemList) {
this.feedItemList = feedItemList;
this.mContext = context;
}
@Override
public FeedListRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_row, null);
return new FeedListRowHolder(v);
}
@Override
public void onBindViewHolder(FeedListRowHolder feedListRowHolder, int i) {
FeedItem feedItem = feedItemList.get(i);
Picasso.with(mContext).load(feedItem.getThumbnail())
.error(R.drawable.placeholder)
.placeholder(R.drawable.placeholder)
.into(feedListRowHolder.thumbnail);
feedListRowHolder.title.setText(Html.fromHtml(feedItem.getTitle()));
feedListRowHolder.date.setText(Html.fromHtml(feedItem.getDate()));
feedListRowHolder.tags.setText(Html.fromHtml(feedItem.getTags()));
}
@Override
public int getItemCount() {
return (null != feedItemList ? feedItemList.size() : 0);
}
}
我们如何将 OnClickListener
添加到此 RecyclerView
?
谢谢
您可以像这样使 RecyclerItem
可点击
public class FeedListRowHolder extends RecyclerView.ViewHolder {
protected ImageView thumbnail;
protected TextView title;
protected TextView date;
protected TextView tags;
public FeedListRowHolder(View view) {
super(view);
this.thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
this.title = (TextView) view.findViewById(R.id.title);
this.date = (TextView) view.findViewById(R.id.date);
this.tags = (TextView) view.findViewById(R.id.tagsItems);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do you stuff here
}
});
}
}
您应该在 RecyclerView.ViewHolder 中实现 View.OnClickListener。如果您想收听整个项目,请单击。请参阅下面修改后的 viewholder class
public class FeedListRowHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
protected ImageView thumbnail;
protected TextView title;
protected TextView date;
protected TextView tags;
public FeedListRowHolder(View view) {
super(view);
this.thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
this.title = (TextView) view.findViewById(R.id.title);
this.date = (TextView) view.findViewById(R.id.date);
this.tags = (TextView) view.findViewById(R.id.tagsItems);
}
@Override
public void onClick(View v) {
}
}
让我们开始吧。如果你想要单独的视图点击然后注册每个按钮或视图点击到这个视图holder.For示例缩略图点击可以注册如下。
public class FeedListRowHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
protected ImageView thumbnail;
protected TextView title;
protected TextView date;
protected TextView tags;
public FeedListRowHolder(View view) {
super(view);
this.thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
this.thumbnail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
this.title = (TextView) view.findViewById(R.id.title);
this.date = (TextView) view.findViewById(R.id.date);
this.tags = (TextView) view.findViewById(R.id.tagsItems);
}
@Override
public void onClick(View v) {
}
}
有很多方法可以解决这个问题,但下面给出了其中一种
RecyclerView recyclerView = findViewById(R.id.recycler);
recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() {
@Override public void onItemClick(View view, int position) {
// do whatever
}
})
);
RecyclerItemClickListener 实现:
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
public void onItemClick(View view, int position);
}
GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
}
@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.getChildPosition(childView));
return true;
}
return false;
}
@Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }
}
Write on OnCreate method
recyclerview.addOnItemTouchListener(
new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
FeedItem bookScreenDateEntity = (FeedItem)yourList.get(position);
bookScreenDateEntity.getServiceid();
}
})
);
RecyclerItemClickListener class:
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
public void onItemClick(View view, int position);
}
GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
}
@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) {
}
}