ReclerVew内嵌ReclerView笔记

1.ReclerVew作用简介

使用ReclerView来组装列表起来非常方便,而且优势远远不是ListView,GridView等能够比的,它能轻而易举实现类似于淘宝,京东商城首页那样布局复杂的样式。在当前的使用十分广泛了。

2.ReclerView内嵌ReclerView,实现复杂布局,废话少说,直接上代码。

1)Acitivity或者Fragment核心代码如下

//设置RecyclerView为,线性排列LinearLayoutManager,行列排列 GridLayoutManager
 mRecyclerView.setLayoutManager(new LinearLayoutManager(mActivity));
 mRecyclerView.setAdapter(mAdapter = new HnMainIdentifyListAdapter(mActivity));

给adapter设置数据

  //传入数据,更新适配器
 mAdapter.setIdentifyingDataList(mIdentifyingkData);
 mAdapter.notifyDataSetChanged();

2)最外层Adapter代码,组装多个ViewHolder,传入不同布局。

public class HnMainListAdapter extends RecyclerView.Adapter {

    /**
     * type:bannar,invite,Identifying
     */
    public static final int IDENTIFYING = 0;

    /**
     * type:Identify of rest
     */
    public static final int REST_OF_IDENTIFY = 1;

    /**
     * type:Identifyed
     */
    public static final int END_OD_IDENTIFY = 2;

    /**
     * Init LayoutInflater
     */
    private LayoutInflater mLayoutInflater;
    private Activity mContext;

    /**
     * data
     */
    private List<IdentifyListModel.DBean.ItemsBean> mDataIdentifyingList = new ArrayList<>();
    private  List<IdentifyListModel.DBean.ItemsBean> mDataIdentifyRestList = new ArrayList<>();
    private  List<HnIdentifyPlaybackListModel.DBean.ItemsBean> mDataPlaybackList = new ArrayList<>();



    private List<HnBannerModel.DEntity.CarouselEntity> mBannerData = new ArrayList<>();
    private List<String> imgUrl = new ArrayList<>();

    public HnMainIdentifyListAdapter(Activity mContext) {

        this.mContext = mContext;
        mLayoutInflater = LayoutInflater.from(mContext);
    }

    public void setIdentifyingDataList(List<IdentifyListModel.DBean.ItemsBean> mData) {
        this.mDataIdentifyingList = mData;

    }

    public void setPlayBackDataList(List<HnIdentifyPlaybackListModel.DBean.ItemsBean> mData) {
        this.mDataPlaybackList = mData;

    }
    public void setIdentifyRestDataList(List<IdentifyListModel.DBean.ItemsBean> mData) {
        this.mDataIdentifyRestList = mData;

    }
    /**
     * current type
     */
    private int currentType = IDENTIFYING;


    /**
     * Like the mothod of getView ListView,this mothod is for create ViewHolder.
     *
     *
     * @param parent
     * @param viewType
     * @return
     */
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == IDENTIFYING) {
            return new IdentifyingHolder(mLayoutInflater.inflate(R.layout.item_identifying_list, null));
        } else if (viewType == REST_OF_IDENTIFY) {
            return new IdentifRestHolder(mLayoutInflater.inflate(R.layout.item_identify_rest_list, null));
        } else if (viewType == END_OD_IDENTIFY) {
            return new IdentifyPlaybackHolder(mLayoutInflater.inflate(R.layout.item_identify_playback_list, null));
        }
        return null;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (getItemViewType(position) == IDENTIFYING) {
            IdentifyingHolder identifyingHolder = (IdentifyingHolder) holder;
            identifyingHolder.setData(mDataIdentifyingList);
        } else if (getItemViewType(position) == REST_OF_IDENTIFY) {
            IdentifRestHolder identifRestHolder = (IdentifRestHolder) holder;
            identifRestHolder.setData(mDataIdentifyRestList);
        } else if (getItemViewType(position) == END_OD_IDENTIFY) {
            IdentifyPlaybackHolder identifyPlaybackHolder = (IdentifyPlaybackHolder) holder;
            identifyPlaybackHolder.setData(mDataPlaybackList);
        }

    }

    /**
     * get the type of the item.
     * @param position
     * @return
     */
    @Override
    public int getItemViewType(int position) {
        switch (position) {
            case IDENTIFYING:
                currentType = IDENTIFYING;
                break;
            case REST_OF_IDENTIFY:
                currentType = REST_OF_IDENTIFY;
                break;
            case END_OD_IDENTIFY:
                currentType = END_OD_IDENTIFY;
                break;
        }
        return currentType;
    }

    @Override
    public int getItemCount() {
        return 3;
    }


    /**
     * identifying
     */
    class IdentifyingHolder extends RecyclerView.ViewHolder{


        private RecyclerView mRecyclerview;
        private ConvenientBanner mBanner;
        private FrescoImageView mIvJiaobiaoTuijian;

        private View headView;
        private HnHomeLiveIdentifyAdapter mAdapter;


        public IdentifyingHolder(View itemView) {
            super(itemView);

            mRecyclerview = (RecyclerView) itemView.findViewById(R.id.recyclerview);

        }

        public void setData(List<IdentifyListModel.DBean.ItemsBean> mDataList) {
            //1.得到数据了
            //2.设置数据:文本和RecyclerView的数据
            mAdapter = new HnHomeLiveIdentifyAdapter(mDataList);
            mAdapter.setActivity(mContext);
            mRecyclerview.setAdapter(mAdapter);

            //The header of recyclerview
            headView = LayoutInflater.from(mContext).inflate(R.layout.item_identify_banner, null);
            mBanner = headView.findViewById(R.id.convenientBanner);
            mIvJiaobiaoTuijian = headView.findViewById(R.id.mIvJiaobiaoTuijian);
            mAdapter.setHeaderView(headView);

            getBanner("7",mBanner);//鉴宝广告

            mIvJiaobiaoTuijian.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    mContext.startActivity(new Intent(mContext, HnInviteFriendActivity.class).putExtra("invite_type", "2"));
                }
            });
            //设置布局管理器
            mRecyclerview.setLayoutManager(new LinearLayoutManager(mContext,LinearLayoutManager.VERTICAL,false));
            //设置item的点击事件
            mAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
                @Override
                public void onItemClick(BaseQuickAdapter adapter, View view, int position) {

                }
            });



        }
    }

    /**
     * identify of rest
     */
    class IdentifRestHolder extends RecyclerView.ViewHolder{


        private RecyclerView mRecyclerview;
        private HnIdentifRestAdapter mAdapter;


        public IdentifRestHolder(View itemView) {
            super(itemView);

            mRecyclerview = (RecyclerView) itemView.findViewById(R.id.recyclerview);

        }

        public void setData(List<IdentifyListModel.DBean.ItemsBean> mDataList) {
            //1.得到数据了
            //2.设置数据:文本和RecyclerView的数据
            mAdapter = new HnIdentifRestAdapter(mDataList);
            mAdapter.setActivity(mContext);
            mRecyclerview.setAdapter(mAdapter);


            //设置布局管理器
            mRecyclerview.setLayoutManager(new LinearLayoutManager(mContext,LinearLayoutManager.HORIZONTAL,false));
            //设置item的点击事件
            mAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
                @Override
                public void onItemClick(BaseQuickAdapter adapter, View view, int position) {

                }
            });



        }
    }

    /**
     * identify of playback
     */
    class IdentifyPlaybackHolder extends RecyclerView.ViewHolder{

        private RecyclerView mRecyclerview;
        private HnIdentifyPlaybackAdapter mAdapter;


        public IdentifyPlaybackHolder(View itemView) {
            super(itemView);

            mRecyclerview = (RecyclerView) itemView.findViewById(R.id.recyclerview);

        }

        public void setData(List<HnIdentifyPlaybackListModel.DBean.ItemsBean> mDataList) {
            //1.得到数据了
            //2.设置数据:文本和RecyclerView的数据
            mAdapter = new HnIdentifyPlaybackAdapter(mDataList);
            mAdapter.setActivity(mContext);
            mRecyclerview.setAdapter(mAdapter);


            //设置布局管理器
            mRecyclerview.setLayoutManager(new GridLayoutManager(mContext,2));
            //设置item的点击事件
            mAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
                @Override
                public void onItemClick(BaseQuickAdapter adapter, View view, int position) {

                }
            });



        }
    }

}

3)最外层的ReclerView的xml布局,内嵌的ReclerView布局差不多,不写了。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/mRlPer"
    android:background="?attr/pageBg_color"
    >

    <com.hn.library.refresh.PtrClassicFrameLayout
        android:id="@+id/ptr_refresh"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/rl_title"
        app:ptr_mode="both">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:overScrollMode="never" />

    </com.hn.library.refresh.PtrClassicFrameLayout>

</RelativeLayout>

4)由于时间仓促,整理的不太充分,后面有时间在整理出来。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章