RecyclerView的基本使用

    //1.獲取控件
    lv = (RecyclerView) findViewById(R.id.lv);

    //2.數(shù)據(jù)源
    list = new ArrayList<>();
    for (int i = 0; i < 20; i++) {
        list.add(getE(i));
    }

    //3.設置適配器
    adapter = new MyAdapter(this,list);
    lv.setAdapter(adapter);

    //4.設置顯示方式
    //線性方式
    /*LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
    lv.setLayoutManager(layoutManager);*/

    //網(wǎng)格方式
    GridLayoutManager layoutManager = new GridLayoutManager(this,2);
    lv.setLayoutManager(layoutManager);

    //瀑布流方式
    /*StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
    lv.setLayoutManager(layoutManager);*/
                           
    //設置分隔線
    /*lv.addItemDecoration(new DividerItemDecoration(this,LinearLayoutManager.HORIZONTAL));
    lv.addItemDecoration(new DividerItemDecoration(this,LinearLayoutManager.VERTICAL));*/

    //設置item條目的動畫效果
    lv.setItemAnimator( new DefaultItemAnimator());

(一般使用在滑動Toolbar 和MyBottomView隱藏)滑動監(jiān)聽:

rv.addOnScrollListener(new RecyclerView.OnScrollListener() {

             private MyBottomView mBottomView;
             private Toolbar mToba;

             @Override
             public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                 super.onScrollStateChanged(recyclerView, newState);
                 Log.e("滑動監(jiān)聽", "onScrollStateChanged: "+newState );
             }

             
           
             @Override
             public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                 super.onScrolled(recyclerView, dx, dy);
                 MainActivity activity = (MainActivity) getActivity();
                 mToba = activity.toba;
                 mBottomView = activity.bottomView;
                 if (getScollYDistance() <= 0) {
                     //靜止并處于最頂端狀態(tài)
                     mToba.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.hong));
                     mToba.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.hong));
                     mToba.setVisibility(View.VISIBLE);
                     mBottomView.setVisibility(View.VISIBLE);

                 } else if (getScollYDistance() > 0 && getScollYDistance() <= 400) {//滑動在0-400距離的時候
                     if (getScollYDistance() <= 200) {//處于滑動到中間的時候
                         mToba.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.hong));
                     } else {//滑出到200以外
//                tvTitle.setBackgroundColor(Color.argb((int) 255, 254, 184, 6));
                         mToba.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.hong));
                     }
                     float scale = (float) getScollYDistance() / 400;
                     float alpha = (255 * scale);
                     // 只是layout背景透明(仿知乎滑動效果)
                     mToba.setBackgroundColor(Color.argb((int) alpha, 254, 184, 6));
                 } else {
                     mToba.setVisibility(View.GONE);
                     mBottomView.setVisibility(View.GONE);
                 }
             }
         });

    public int getScollYDistance() {
        int position = mLayoutManager.findFirstVisibleItemPosition();
        View firstVisiableChildView = mLayoutManager.findViewByPosition(position);
        int itemHeight = firstVisiableChildView.getHeight();
        return (position) * itemHeight - firstVisiableChildView.getTop();
    }

多布局的適配器

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private Context context;
    private ArrayList<ResultDemo.DataBean.DatasBean> list;

    //構造方法傳遞
    public MyAdapter(Context context, ArrayList<ResultDemo.DataBean.DatasBean> list) {
        this.context = context;
        this.list = list;
    }

    //設置數(shù)據(jù)源
    public void setList(ArrayList<ResultDemo.DataBean.DatasBean> list) {
        this.list = list;
    }

    //創(chuàng)建顯示視圖
    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int type) {

        /**
         * 根據(jù)不同type類型、創(chuàng)建不同布局ViewHolder
         */
        RecyclerView.ViewHolder viewHolder = null;//抽出父類統(tǒng)一返回
        if (type == 100){//顯示第一種布局
            View inflate = LayoutInflater.from(context).inflate(R.layout.layout_item1, null);
            viewHolder = new ViewHolderA(inflate);
        }else{//顯示第二種布局
            View inflate = LayoutInflater.from(context).inflate(R.layout.layout_item2, null);
            viewHolder = new ViewHolderB(inflate);
        }
        return viewHolder;//返回統(tǒng)一
    }
    //綁定數(shù)據(jù)
    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int position) {
        //獲取數(shù)據(jù)源
        ResultDemo.DataBean.DatasBean datasBean = list.get(position);
        /**
         * 根據(jù)不同的viewHolder顯示不同的數(shù)據(jù)操作
         */
        if (viewHolder instanceof  ViewHolderA){//判斷viewHolder是否為ViewHolderA類型
            ViewHolderA viewHolderA = (ViewHolderA) viewHolder;//將父類viewHolder強轉(zhuǎn)為子類ViewHolderA

            //數(shù)據(jù)綁定顯示
            viewHolderA.titleA.setText(datasBean.getTitle());
            viewHolderA.sourceA.setText(datasBean.getChapterName());
            Glide.with(context).load(datasBean.getEnvelopePic()).into(viewHolderA.imgA);
        }else if (viewHolder instanceof  ViewHolderB){//判斷viewHolder是否為ViewHolderB類型
            ViewHolderB viewHolderB = (ViewHolderB) viewHolder;//將父類viewHolder強轉(zhuǎn)為子類ViewHolderB

            //數(shù)據(jù)綁定顯示
            viewHolderB.titleB.setText(datasBean.getTitle());
            viewHolderB.sourceB.setText(datasBean.getChapterName());
            Glide.with(context).load(datasBean.getEnvelopePic()).into(viewHolderB.imgB);
        }

        /**
         * 3.實現(xiàn)點擊事件的回調(diào)處理
         */
        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onItemClickListener !=null){
                    onItemClickListener.onItemClick(position);
                }
            }
        });

        //長按監(jiān)聽、返回對應的position位置
        viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                //1.通過接口回調(diào),把position傳給頁面使用
                if (onItemClickListener !=null){
                    onItemClickListener.onLongItemClick(position);
                }
                //2.默認設置不響應
                return false;
            }
        });
    }

    //返回集合長度
    @Override
    public int getItemCount() {
        return list.size();
    }

    /**
     *  根據(jù)position等不同規(guī)則,返回不同的類型值
     *
     *      本案例使用奇偶數(shù)劃分
     */
    @Override
    public int getItemViewType(int position) {
        if (position % 2 == 0){
            return 100;
        }else{
            return 200;
        }
    }

    //布局輔助類ViewHolderA
    class ViewHolderA extends RecyclerView.ViewHolder{

        private ImageView imgA;
        private TextView titleA;
        private TextView sourceA;
        public ViewHolderA(@NonNull View itemView) {
            super(itemView);
            imgA = itemView.findViewById(R.id.img);
            titleA = itemView.findViewById(R.id.title);
            sourceA = itemView.findViewById(R.id.source);
        }
    
    //布局輔助類ViewHolderB
    class ViewHolderB extends RecyclerView.ViewHolder{
        private ImageView imgB;
        private TextView titleB;
        private TextView sourceB;
        public ViewHolderB(@NonNull View itemView) {
            super(itemView);
            imgB = itemView.findViewById(R.id.img);
            titleB = itemView.findViewById(R.id.title);
            sourceB = itemView.findViewById(R.id.source);
        }
    }

    /**
     * 1.定義接口,提供成員變量、實現(xiàn)公開的set方法
     */
    private OnItemClickListener onItemClickListener;

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    public interface OnItemClickListener{
        void onItemClick(int position);
        void onLongItemClick(int position);
    }
}

CardView的常用屬性
班級 功能
card_view:cardElevation 陰影的大小
card_view:cardMaxElevation 陰影最大高度
card_view:cardBackgroundColor 卡片的背景色
card_view:cardCornerRadius 卡片的圓角大小
card_view:contentPadding 卡片內(nèi)容于邊距的間隔
card_view:contentPaddingBottom 卡片內(nèi)容與底部的邊距
card_view:contentPaddingTop 卡片內(nèi)容與頂部的邊距
card_view:contentPaddingLeft 卡片內(nèi)容與左邊的邊距
card_view:contentPaddingRight 卡片內(nèi)容與右邊的邊距
card_view:contentPaddingStart 卡片內(nèi)容于邊距的間隔起始
card_view:contentPaddingEnd 卡片內(nèi)容于邊距的間隔終止
card_view:cardUseCompatPadding 設置內(nèi)邊距,V21+的版本和之前的版本仍舊具有一樣的計算方式
card_view:cardPreventCornerOverlap 在V20和之前的版本中添加內(nèi)邊距,這個屬性為了防止內(nèi)容和邊角的重疊

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容