【菜鸟之路】RecyclerView添加Item点击事件

来源:互联网 发布:2k16本西蒙斯捏脸数据 编辑:程序博客网 时间:2024/06/09 19:03

  今天下午继续在项目中学着做RecyclerView,想给每个Item添加一个点击跳转,翻了翻买的两本书发现没有呃,只能百度+看看网上前辈们的代码了。
  翻了一些比较不错的文章,了解到大概的几种实现方法:
  1.通过RecyclerView中预留的addOnItemTouchListener()方法
  2.在Adapter创建ItemView时添加事件监听
  3.当ItemView attach RecyclerView时实现
  (出处http://blog.devwiki.net/index.php/2016/07/24/three-ways-click-recyclerview-item.html?utm_source=tuicool&utm_medium=referral)
 
  第1,3种实现在单独的类中,可以使代码更简洁。第2种方法更简单实现,我先试了一下该方法,用在了最近的项目里面(项目地址:http://github.com/LAILAIWA/Slinky2)
 
这里我写在了我的Fragment的initData()里面,设置适配器的后面

//添加监听回调        mAdapter.setClickListener(new GeneralAdapter.ItemClickListener(){            @Override            public void OnItemClick(View view, int position) {                Log.e("-----Item clicked-----",String.valueOf(position));                Toast.makeText(getActivity(), "Item " + position + " clicked:", Toast.LENGTH_SHORT).show();                //跳转动作            }        });

更改了之前写的adapter

public class GeneralAdapter extends RecyclerView.Adapter<GeneralAdapter.MyViewHolder> {    private List<team> mDatas;    private LayoutInflater mInflater;    private ItemClickListener ClickListener;    public GeneralAdapter(Context context, List<team> mDatas) {        this.mDatas = mDatas;        mInflater = LayoutInflater.from(context);    }    @Override    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        MyViewHolder holder = new MyViewHolder(mInflater.inflate(                R.layout.item_common_adapter, parent, false));        return holder;    }    @Override    public void onBindViewHolder(final MyViewHolder holder, final int position) {        //为holde设置指定数据,将数据绑定到每一个childView中        team tdata = mDatas.get(position);        holder.tvTeamTitle.setText(tdata.title);        holder.tvTeamInfo.setText(tdata.charge1);        holder.tvTeamType.setText(tdata.type);        //创建view时添加监听事件        if(ClickListener != null){            holder.tvTeamTitle.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    ClickListener.OnItemClick(view,position);                }            });            holder.tvTeamInfo.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    ClickListener.OnItemClick(view,position);                }            });            holder.tvTeamType.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    ClickListener.OnItemClick(view,position);                }            });        }    }    public GeneralAdapter setClickListener(ItemClickListener ClickListener){        this.ClickListener = ClickListener;        return this;    }    @Override    public int getItemCount() {        return mDatas.size();    }    public class MyViewHolder extends RecyclerView.ViewHolder {        TextView tvTeamTitle;        TextView tvTeamInfo;        TextView tvTeamType;        public MyViewHolder(View view) {            super(view);            tvTeamTitle = (TextView) view.findViewById(R.id.text_team_title);            tvTeamInfo = (TextView) view.findViewById(R.id.text_team_info);            tvTeamType = (TextView) view.findViewById(R.id.text_team_type);        }    }    public interface ItemClickListener{        //声明接口ItemClickListener        void OnItemClick(View view,int position);//        void OnTitleClick(View view,int position);//        void OnInfoClick(View view,int position);//        void OnTypeClick(View view,int position);    }}
0 0
原创粉丝点击