• Android RecyclerView的使用


    RecyclerView可以实现ListView和GridView的功能,但是有以下特点:

    1. 可以实现横向滚动,瀑布样式排列;
    2. 相较于ListView和GridView中需要手动复用convertView和ViewHolder,RecyclerView内部对对象的复用做了封装,只需要用就可以了;
    3. Adapter有一个notifyItemChanged()方法,可以对局部数据进行修改;
    4. 没有统一的Item点击、长按等的监听器,需要在itemView加载时单独设置。

    用法

    新建一个自己的适配器类,继承RecyclerView.Adapter类,该类拥有一个限定泛型,必须继承自Recycler.ViewHolder类。

        private static class RVAdapter extends RecyclerView.Adapter<RVAdapter.RVHolder>{
            private ArrayList<Item> data ;
    
            public RVAdapter(ArrayList<Item> data) {
                this.data = data;
            }
    
            @NonNull
            @Override
            public RVHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                Log.d(TAG, "onCreateViewHolder: 创建了一个对象");
                View view = View.inflate(parent.getContext(),R.layout.onenumber_layout,null);
                TextView v1 = view.findViewById(R.id.tv);
                TextView v2 = view.findViewById(R.id.tv2);
                return new RVHolder(view,v1,v2);
            }
    
            @Override
            public void onBindViewHolder(@NonNull RVHolder holder, int position) {
                holder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(context,position+"",Toast.LENGTH_SHORT).show();
                    }
                });
                holder.t1.setText(data.get(position).id+"");
                holder.t2.setText(data.get(position).val);
            }
    
            @Override
            public int getItemCount() {
                return data.size();
            }
    
            private static class RVHolder extends RecyclerView.ViewHolder{
                TextView t1,t2;
                public RVHolder(@NonNull View itemView,TextView... textViews) {
                    super(itemView);
                    t1=textViews[0];
                    t2=textViews[1];
    
                }
    
            }
        }
    

    需要重写三个方法,分别是

    • getItemCount()获取item总数;
    • onCreateViewHolder() 创建View时调用,创建好View并放入ViewHolder中,返回这个ViewHolder;
    • onBindViewHolder() 复用View时调用,将View从ViewHolder中拿出,填充数据即可。

    由于RecyclerView不像ListView那样有onItemClickListener(),如果需要为其设置点击事件,则需要在Adapter的onBindViewHolder()方法中,为这个ItemView设置点击事件(onClickListener)。

  • 相关阅读:
    [bzoj3295][Cqoi2011][动态逆序对] (树套树)
    [bzoj3209][花神的数论题] (数位dp+费马小定理)
    [bzoj1026][SCOI2009][windy数] (数位dp)
    [bzoj4521][Cqoi2016][手机号码] (数位dp+记忆化搜索)
    [bzoj1833][ZJOI2010][count] (数位dp)
    [spoj1182][Sorted Bit Sequence] (数位dp)
    [ural1057][Amount of Degrees] (数位dp+进制模型)
    [hdu3652][B-number] (数位dp)
    【bzoj2523】【CTSC2001】聪明的学生
    友情链接(有的是单向的)
  • 原文地址:https://www.cnblogs.com/pravez/p/12605113.html
Copyright © 2020-2023  润新知