问答

请教一个关于RecyclerView多布局中有水平滑动的RecyclerView数据

作者:admin 2021-08-21 我要评论

垂直滑动的父RecyclerView中有多种布局,其中一种是水平滑动的RecyclerView,比如这个水平的RecyclerView在垂直父RecyclerView的第3条item和第7条item各有一个,我...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

垂直滑动的父RecyclerView中有多种布局,其中一种是水平滑动的RecyclerView,比如这个水平的RecyclerView在垂直父RecyclerView的第3条item和第7条item各有一个,我点击了第3条item中的水平RecyclerView的一个"关注",状态变为"已关注",这时候往下滑动到第7条item的水平RecyclerView,这时候对应的item也变成了"已关注",也就是说第3条和第7条水平的RecyclerView同步了,这种问题怎么解决呢?说起来比较抽象,下面是截图和代码:
1.截图:
333333.png
7777777.png

2.水平RecyclerView的Adapter:

public class TempFiveAdapter extends BaseItemProvider<FocusBean.DataBean.ListBean> {

    private FocusHorizontalListAdapter adapter;

    @Override
    public int getItemViewType() {
        return FocusBean.DataBean.ListBean.FIFTH_TYPE;
    }

    @Override
    public int getLayoutId() {
        return R.layout.multiple_item_home_focus_horizontal_list;
    }

    @Override
    public void convert(@NotNull BaseViewHolder helper, FocusBean.DataBean.ListBean listBean) {
        RecyclerView recyclerView = helper.getView(R.id.rv_home_focus_horizontal_list);
        List<FocusBean.DataBean.ListBean> data = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            FocusBean.DataBean.ListBean bean = new FocusBean.DataBean.ListBean();
            data.add(bean);
        }
        if (adapter == null) {
            LinearLayoutManager manager = new LinearLayoutManager(getContext());
            manager.setOrientation(LinearLayoutManager.HORIZONTAL);
            recyclerView.setLayoutManager(manager);
            adapter = new FocusHorizontalListAdapter(R.layout.multiple_item_focus_horizontal, data);
            LogUtils.d("0855   55555");
            recyclerView.setAdapter(adapter);
            adapter.addChildClickViewIds(R.id.tv_group_focus);
            adapter.setOnItemChildClickListener(new OnItemChildClickListener() {
                @Override
                public void onItemChildClick(@NonNull BaseQuickAdapter adapter, @NonNull View view, int position) {
                    Toast.makeText(getContext(), "点击了" + position, Toast.LENGTH_SHORT).show();
                    FocusBean.DataBean.ListBean listBean = data.get(position);
                    listBean.setFocused(listBean.isFocused() ? false : true);
                    adapter.notifyItemChanged(position);
                }
            });
        }else{
//            recyclerView.setAdapter(adapter);
        }
    }
}

3.水平RecyclerView子item的adpater:

public class FocusHorizontalListAdapter extends BaseQuickAdapter<FocusBean.DataBean.ListBean, BaseViewHolder> {


    public FocusHorizontalListAdapter(int layoutResId, @Nullable List<FocusBean.DataBean.ListBean> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(@NotNull BaseViewHolder helper, FocusBean.DataBean.ListBean listBean) {
        TextView focusText = helper.getView(R.id.tv_group_focus);
        boolean focused = listBean.isFocused();
        if(focused){
            focusText.setText("已关注");
            focusText.setTextColor(Color.parseColor("#999999"));
            focusText.setBackgroundResource(R.drawable.focused_shape);
        }else{
            focusText.setText("关注");
            focusText.setTextColor(Color.parseColor("#FFFFFF"));
            focusText.setBackgroundResource(R.drawable.unfocus_shape);
        }

    }
}

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 使用箭头函数return数据不能实现

    使用箭头函数return数据不能实现

  • 个人小程序号能接入小程序3D地图吗?

    个人小程序号能接入小程序3D地图吗?

  • vue 移动端项目中,使用了better-scrol

    vue 移动端项目中,使用了better-scrol

  • css如何做出区域平均划分为四列

    css如何做出区域平均划分为四列

腾讯云代理商
海外云服务器