Recyclerview 嵌套Recyclerview

本文介绍了如何在Android中实现RecyclerView的嵌套,详细讲解了主RecyclerView的逻辑,包括创建标题头、横向滑动的子RecyclerView以及纵向排列的条目。在Adapter中通过判断item类型返回不同ViewHolder,并在onCreateViewHolder中设置子RecyclerView的宽高。在onBindViewHolder中初始化二级RecyclerView,完成嵌套布局的构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一  首先写主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 就完成了

      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值