RecyclerView onItemClick监听器 [英] RecyclerView onItemClick Listener
本文介绍了RecyclerView onItemClick监听器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何实施 RecyclerView
onItemClick 监听器,因为我们做的ListView,这是用我的旧的适配器类的ListView
:
公共类GenreAdapter延伸BaseAdapter {....@覆盖
公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup){
//转换视图=设计
视图V = convertView;
如果(V == NULL){
持有人=新ViewHolder();
V = vi.inflate(资源,NULL);
holder.textTitle =(TextView中)v.findViewById(R.id.textTitle);
v.setTag(保持器);
}其他{
支架=(ViewHolder)v.getTag();
} holder.textTitle.setText(genreArrayList.get(位置).getTitle()); v.setOnClickListener(新OnClickListener(){ @覆盖
公共无效的onClick(视图v){ 束束=新包();
bundle.putSerializable(数据,genreArrayList);
bundle.putInt(当前,位置); 意向意图=新意图(背景下,MovieActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtras(包);
context.startActivity(意向); }
}); 返回伏;
}静态类ViewHolder {
公众的TextView textTitle;
}
MainFragment.java: -
@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState){
鉴于= inflater.inflate(R.layout.fragment_main,集装箱,FALSE); / *初始化回收视图* /
mRecyclerView =(RecyclerView)view.findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(新LinearLayoutManager(getActivity())); mRecyclerView.addItemDecoration(新DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL_LIST)); 名单=新的ArrayList< MainPoho>();
适配器=新MainAdapter(getActivity(),清单);
mRecyclerView.setAdapter(适配器); .......}
这是用我的新的适配器
类 RecyclerView
:
公共类MyRecyclerAdapter扩展RecyclerView.Adapter< FeedListRowHolder> { 私人列表< FeedItem> feedItemList;
私人语境mContext; 公共MyRecyclerAdapter(上下文的背景下,列表与LT; FeedItem> feedItemList){
this.feedItemList = feedItemList;
this.mContext =背景;
} @覆盖
公共FeedListRowHolder onCreateViewHolder(ViewGroup中ViewGroup中,int i)以{
视图V = LayoutInflater.from(viewGroup.getContext())膨胀(R.layout.list_row,NULL);
FeedListRowHolder MH =新FeedListRowHolder(V);
返回MH;
} @覆盖
公共无效onBindViewHolder(FeedListRowHolder feedListRowHolder,int i)以{
FeedItem feedItem = feedItemList.get(ⅰ);
feedListRowHolder.title.setText(Html.fromHtml(feedItem.getTitle()));
} @覆盖
公众诠释getItemCount(){
如果(feedItemList!= NULL){
返回feedItemList.size();
}其他{
返回0;
}
}
公共类FeedListRowHolder扩展RecyclerView.ViewHolder {
保护TextView的称号; 公共FeedListRowHolder(查看视图){
超(视图);
this.title =(TextView中)view.findViewById(R.id.title);
}
FeedItem.java: -
公共类FeedItem {
私人字符串称号; 公共字符串的getTitle(){
返回称号;
} 公共无效的setTitle(字符串名称){
this.title =称号;
}}
解决方案
在您viewHolder第一家店全视图:
公共类FeedListRowHolder扩展RecyclerView.ViewHolder {
保护TextView的称号;
受保护的视图mRootView; 公共FeedListRowHolder(查看视图){
超(视图);
this.title =(TextView中)view.findViewById(R.id.title);
mRootView =视图。
}
然后点击设置在监听 onBindViewHolder
:
@覆盖
公共无效onBindViewHolder(FeedListRowHolder feedListRowHolder,int i)以{
FeedItem feedItem = feedItemList.get(ⅰ);
feedListRowHolder.title.setText(Html.fromHtml(feedItem.getTitle()));
feedListRowHolder.mRootView.setOnClickListener(新OnClickListener(){ @覆盖
公共无效的onClick(视图v){ }
});
}
How to implement RecyclerView
onItemClick listener as we do with ListView, this is my old Adapter class using ListView
:
public class GenreAdapter extends BaseAdapter {
....
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// convert view = design
View v = convertView;
if (v == null) {
holder = new ViewHolder();
v = vi.inflate(Resource, null);
holder.textTitle = (TextView) v.findViewById(R.id.textTitle);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
holder.textTitle.setText(genreArrayList.get(position).getTitle());
v.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = new Bundle();
bundle.putSerializable("data", genreArrayList);
bundle.putInt("current", position);
Intent intent = new Intent(context, MovieActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtras(bundle);
context.startActivity(intent);
}
});
return v;
}
static class ViewHolder {
public TextView textTitle;
}
MainFragment.java:-
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_main, container, false);
/* Initialize recycler view */
mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));
list = new ArrayList<MainPoho>();
adapter = new MainAdapter(getActivity(), list);
mRecyclerView.setAdapter(adapter);
.......
}
And here is my new Adapter
class using RecyclerView
:
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);
FeedListRowHolder mh = new FeedListRowHolder(v);
return mh;
}
@Override
public void onBindViewHolder(FeedListRowHolder feedListRowHolder, int i) {
FeedItem feedItem = feedItemList.get(i);
feedListRowHolder.title.setText(Html.fromHtml(feedItem.getTitle()));
}
@Override
public int getItemCount() {
if(feedItemList !=null){
return feedItemList.size();
} else {
return 0;
}
}
public class FeedListRowHolder extends RecyclerView.ViewHolder {
protected TextView title;
public FeedListRowHolder(View view) {
super(view);
this.title = (TextView) view.findViewById(R.id.title);
}
FeedItem.java:-
public class FeedItem {
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
解决方案
first store whole view in your viewHolder:
public class FeedListRowHolder extends RecyclerView.ViewHolder {
protected TextView title;
protected View mRootView;
public FeedListRowHolder(View view) {
super(view);
this.title = (TextView) view.findViewById(R.id.title);
mRootView = view;
}
then set click listener at onBindViewHolder
:
@Override
public void onBindViewHolder(FeedListRowHolder feedListRowHolder, int i) {
FeedItem feedItem = feedItemList.get(i);
feedListRowHolder.title.setText(Html.fromHtml(feedItem.getTitle()));
feedListRowHolder.mRootView.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
}
});
}
这篇关于RecyclerView onItemClick监听器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文