RecyclerView onItemClick监听器 [英] RecyclerView onItemClick Listener

查看:293
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆