Android數據列表展示之 RecylerView


一、概述

1.RecyclerView是什么?

RecyclerView是一種新的視圖組,目標是為任何基於適配器的視圖提供相似的渲染方式。該控件用於在有限的窗口中展示大量數據集,它被作為ListView和GridView控件的繼承者。RecyclerView高度解耦,異常靈活,通過設置不同LayoutManager,ItemDecoration , ItemAnimator實現令人想象不到的效果

2.RecyclerView怎么用?

既然RecyclerView的出現是為了要替換ListView和GridView,那么他們必有共通之處,,是的他們都是通過適配器來綁定數據的。

所以RecyclerView需要有如下東西支持:

1.Datas : 要顯示的數據集合

2.Adapter:適配器,綁定數據集

3.ViewHolder:根據當前數據保存視圖,其實就是列表數據的單個item布局

4.LayoutManager:布局管理者,決定列表數據擺放格式,是按照listview方式擺放還是按照gridview方式擺放,又或者是按照瀑布流方式,這就是Recyclerview強大的地方

5.ItemDecoration:列表的分割器,Recyclerview默認沒有給我們提供分割線,需自定義,后續會給出代碼

6.ItemAnimator: 當列表item被“添加”、“刪除”,“位置變動”時執行什么動畫,強大吧!

7.Listener: item事件監聽,RecyclerView默認不提供OnItemClickListener 點擊事件,需我們自定義,靈活使用。

 

二、RecyclerView的詳細用法

1.適配器和普通的適配器不一樣,需要繼承RecyclerView.Adapter

2.listview使用時為了使用緩存,我們會定義一個ViewHolder類去存放布局控件,而RecyclerView 默認就支持這種方式,是不是更加方便了。

public class UserAdapter extends RecyclerView.Adapter {
    private List<UserBean> userBeanList;
    private Context mContext;
    public UserAdapter(Context context,List<UserBean> userBeanList){
        mContext = context;
        this.userBeanList = userBeanList;
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(mContext,R.layout.item_recycler_view,null);
        return new UserViewHolder(view);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if(holder instanceof UserViewHolder){
            UserViewHolder userViewHolder = (UserViewHolder) holder;
            UserBean userBean  = userBeanList.get(position);
            userViewHolder.name.setText(userBean.getName());
            userViewHolder.number.setText(userBean.getNumber());
        }
    }

    @Override
    public int getItemCount() {
        return userBeanList!=null?userBeanList.size():0;
    }

    class UserViewHolder extends RecyclerView.ViewHolder{
        private TextView name;
        private TextView number;
        public UserViewHolder(View itemView) {
            super(itemView);
            init(itemView);
            //給列表item點擊點擊事件
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(itemClickListener!=null){
                        itemClickListener.onItemClick(v,getLayoutPosition());
                    }
                }
            });
        }

        private void init(View view){
            name = (TextView) view.findViewById(R.id.tv_name);
            number = (TextView) view.findViewById(R.id.tv_number);
        }
    }

    //對外部暴漏點擊事件接口
    public interface OnItemClickListener{
        void onItemClick(View v,int position);
    }

    public OnItemClickListener itemClickListener;

    public void setItemClickListener(OnItemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }
}

運行效果:

源碼地址:https://yunpan.cn/cu782gq6cEPD8 (提取碼:a20d)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM