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