一 首先写主Recycler的逻辑:
(这里用的是BaseFragment ,大家可以忽视里面的一些重载方法 ,直接在onCreateView里面写)
public class FavouriteFragment extends BaseFragment { @BindView(recyclerview) RecyclerView mRecyclerview; @BindView(R.id.not_online) TextView mNotOnline; Unbinder unbinder; @Override protected int setLayoutResouceId() { return R.layout.fragment_main_favourite; } @Override protected void initView() { super.initView(); } @Override protected void onLazyLoad() { super.onLazyLoad(); mRecyclerview = findViewById(recyclerview); mRecyclerview = findViewById(recyclerview); final FavouriteAdapter favouriteAdapter = new FavouriteAdapter(getActivity(), new FirstModel()); final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); mRecyclerview.setAdapter(favouriteAdapter); Log.d("od", "initView: recy?" + favouriteAdapter.getItemCount()); mRecyclerview.setLayoutManager(linearLayoutManager); favouriteAdapter.setOnRvItemClickListener(new FavouriteAdapter.OnRvItemClickListener() { @Override public void onItemClick(int position, View v, int itemPosition) { } }); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO: inflate a fragment view View rootView = super.onCreateView(inflater, container, savedInstanceState); unbinder = ButterKnife.bind(this, rootView); return rootView; } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } }
二 主RecyclerView 的逻辑 :
这里是一个RelativieLayout布局的标题头, 中间是一个横向滑动的RecyclerView , 再来又是一个RelativieLayout布局的标题头,后面的是一些纵向排列的条目:
在RecyclerView对应的Adapter里面我们根据item的类型 返回不同的holder ,当item是一个子RecyclerView的时候,我这里返回MyPlayListHolder:
在OncreateViewHolder里面我们需要注意规定Recyclerview宽高
case FAVOURITE_ADAPTER_TYPE_MY_PLAYLIST: view = View.inflate(mContext, R.layout.item_main_favourite_my_playlist, null); RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, 500); view.setLayoutParams(lp); return new MyPlayListHolder(view);
______________________________________________________________________________________________________________________________________________
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = null; switch (viewType) { case FAVOURITE_ADAPTER_TYPE_HEAD: view = View.inflate(mContext, R.layout.item_main_favourite_head, null); view.setBackgroundColor(Color.CYAN); return new HeadViewHolder(view); case FAVOURITE_ADAPTER_TYPE_MY_PLAYLIST: view = View.inflate(mContext, R.layout.item_main_favourite_my_playlist, null); RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, 500); view.setLayoutParams(lp); return new MyPlayListHolder(view); case FAVOURITE_ADAPTER_TYPE_MY_FAVOURITE: view = View.inflate(mContext, R.layout.item_main_favourite_my_favourite, null); return new MyFavouriteHolder(view); } return null; }
在onBindViewHolder逻辑中 ,要初始化二级RecyclerView:
if (holder instanceof MyPlayListHolder) { MyPlayListHolder myPlayListHolder = ((MyPlayListHolder) holder); myPlayListHolder.mRecyclerview.setAdapter(new MyPlaylistAdapter(mContext, mIModel)); Log.d("pos", "onBindViewHolder: count ?"+ myPlayListHolder.mRecyclerview.getAdapter().getItemCount()); myPlayListHolder.mRecyclerview.setLayoutManager(new LinearLayoutManager(mContext,LinearLayoutManager.HORIZONTAL,false)); myPlayListHolder.mRecyclerview.setBackgroundColor(Color.BLUE); }
这样就recyclerview嵌套recyclerview 就完成了