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)由於時間倉促,整理的不太充分,後面有時間在整理出來。

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