网上关于ListView的左右列表并排挺多,但是现在基本上都没用ListView 了,今天来写写RecycleView左右列表并排。

页面布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/left_list"
        android:layout_width="90dp"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:scrollbars="none" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/right_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none" />

</LinearLayout>

ok,接下来看leftAdapter

public class MostLeftAdapter extends RecyclerView.Adapter {private Context mContext;

    private List<String> mList = new ArrayList<>();
    private MyItemClickListener mItemClickListener;
    private int mPosition;
    private static int TYPE_NORMAL = 101;
    private static int TYPE_SELECT = 102;

    public MostLeftAdapter(Context context) {mContext = context;
        mPosition = 0;
    }public void setList(List<String> list) {mList = list;
    }public List<String> getList() {return mList;
    }public void setOnItemClickListener(MyItemClickListener listener) {this.mItemClickListener = listener;
    }@Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {//根据type显示布局,选中与未选中,当然你可以自行修改
        if (viewType == TYPE_SELECT) {final View view = LayoutInflater.from(mContext).inflate(R.layout.most_left_list_item, parent, false);
            return new ItemViewSelectHolder(view, mItemClickListener);
        } else {final View view = LayoutInflater.from(mContext).inflate(R.layout.most_left_list_item, parent, false);
            return new ItemViewHolder(view, mItemClickListener);
        }}@Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {ItemViewHolder item = (ItemViewHolder) holder;
        item.mostLeftText.setText(mList.get(position));
    }@Override
    public int getItemCount() {return mList.size();
    }@Override
    public int getItemViewType(int position) {if (position == mPosition) {return TYPE_SELECT;
        } else {return TYPE_NORMAL;
        }}public void setPosition(int position) {mPosition = position;
    }public interface MyItemClickListener {void onItemClick(View view, int postion);
    }public class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {private MyItemClickListener mListener;
        @BindView(R.id.most_left_text)TextView mostLeftText;

        public ItemViewHolder(View itemView, MyItemClickListener listener) {super(itemView);
            this.mListener = listener;
            itemView.setOnClickListener(this);
            ButterKnife.bind(this, itemView);
        }@Override
        public void onClick(View v) {if (mListener != null) {mListener.onItemClick(v, getLayoutPosition());
            }}}private class ItemViewSelectHolder extends ItemViewHolder {public ItemViewSelectHolder(View view, MyItemClickListener listener) {super(view, listener);
            itemView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.most_left_select_bg));
            mostLeftText.setTextColor(mContext.getResources().getColor(R.color.red_pre));
        }}

,注释写的很清楚了,相信都能看懂。

右边列表adapter就不贴了,需要的下面会给下载链接。

下面看一下activity里面的逻辑:

//设置左边数据源
private void getLeftName() {for (int i = 0; i < 5; i++) {ChoiceLeftBean bean = new ChoiceLeftBean();
        if (i == 1) {bean.setName("宝马");
        }if (i == 2) {bean.setName("奔驰");
        }if (i == 3) {bean.setName("凯迪拉克");
        }if (i == 4) {bean.setName("现代");
        }if (i == 0) {bean.setName("SUV");
        }mPriceList.add(bean);
    }List<String> prices = new ArrayList<>();
    for (ChoiceLeftBean priceBean : mPriceList) {prices.add(priceBean.getName());
    }leftAdapter.setList(prices);
    //默认根据left的第一项数据去加载右边得数据
    requestRightData(0);
    leftAdapter.notifyDataSetChanged();
    leftAdapter.setOnItemClickListener(new MostLeftAdapter.MyItemClickListener() {@Override
        public void onItemClick(View view, int position) {//设置position,根据position的状态刷新
            leftAdapter.setPosition(position);
            leftAdapter.notifyDataSetChanged();
            requestRightData(position);
        }});

}

首先简单绑定了左列表的数据,同时初始化右列表,代码都有注释,这里不多说。

改变右侧列表数据源:

private void requestRightData(int position) {//这里为了方便,直接更改左边的数据为右边加载的数据了,实际开发中改为所传参数即可
    String category = leftAdapter.getList().get(position);
    List<MostSeriesBean> list = new ArrayList<>();
    MostSeriesBean beans = new MostSeriesBean();
    beans.setName(category);
    list.add(beans);

    getRightData(list);

}

是不是很简单。最后贴张效果图:

下载地址:https://github.com/hedongBlog/MyApplication

RecycleView 实现左右列表并排相关推荐

  1. html 如何让列表并排,html – 并排列表并排包裹太长的行

    更新:我应该先阅读你的整个问题. 取下浮子:左;在< dd>上 One possible problem for beginners using this property (as I a ...

  2. 谁有快狐app苹果下载地址_苹果硅到底有多快?

    谁有快狐app苹果下载地址 At WWDC 2020 Apple officially announced what everyone in the industry already knew: th ...

  3. 判断 小程序 是否 滚动到页面底部 scrolltolower_微信小程序长列表性能优化——recycle-view

    背景: 第七次人口普查项目使用是微信小程序原生框架,组件是根据用户需求由项目组前端组组长封装完成的.采集小程序正式登记首页列表页面,根据腾讯老哥在sentry上的监控可以看出,列表页面前端性能比较差, ...

  4. RecycleView 二级列表(多级列表)

    RecycleView实现二级列表(可以实现多级列表) RecyclerView做的二级列表比官方的ExpandableListView二级列表效率高一些貌似 1.自己的Adapter继承Recycl ...

  5. 微信小程序 — 长列表组件 recycle-view 详细教学

    微信小程序 - 长列表组件 recycle-view 踩坑问题全解 写在前面 引入长列表组件 recycle-view 长列表组件 recycle-view 的使用 问题一.如何增加下拉刷新功能? 问 ...

  6. 一个RecycleView的强大adapter

    代码地址如下: http://www.demodashi.com/demo/12218.html 前言 一般我们要在mainActivity中利用RecycleView展示一个列表数据的时候,adap ...

  7. Android股票列表联动

    使用ScrollerView+RecycleView实现股票列表联动效果:一个可以拿来可以直接使用的解决方案,而且滑动流畅,带标题栏悬浮功能,支持整行的点击效果,支持长安事件: 效果如下图所示: 实现 ...

  8. RecyclerView Adapter 优雅封装搞定所有列表

    转载自: 依然范特稀西 RecycleView加载列表,封装Adapter,快速高效的添加一个列表(包括单 Item 列表和多item列表). 理念 1, 构造一个通用的Adapter模版,避免每添加 ...

  9. 怎么改变html无序列表的字号,html无序列表代码 html5 无序列表的行距怎么设置

    html语句怎么实现无序列表并排?就是两列怎么实现 无序列表并排111 无序列表并排222 css: - #list li{float:left;} float浮动就行了,最好给ol和li设定固定宽度 ...

最新文章

  1. 内存溢出和内存泄漏的区别、产生原因以及解决方案
  2. 如何预约升级鸿蒙,超过66万人预约,华为亮出真正王牌旗舰,支持优先升级鸿蒙系统...
  3. layui概述||layui的学习内容
  4. 16进制数怎么判断正负
  5. Java中已经存在了十几年的一个bug...
  6. 架构师能力升级:掌握JVM科学调优
  7. OC语言——————表视图
  8. idea中 google-java-format 插件的使用
  9. linux svn备份,SVN完全备份svnadmin hotcopy
  10. 腾讯云神图·人脸识别(Face Recognition)常见问题的解答
  11. qq文件未上传至平台服务器,QQ传送离线文件慢是什么原因?原因及处理方法
  12. 计算机黑屏论文,在家写论文电脑突然黑屏自救方案,这几个方法可以解决95%以上的电脑问题...
  13. 安卓使用connectbot连接centos云服务器
  14. 移动电子商务网站可用性-商品页面和购物车
  15. 统计学习方法——李航 笔记
  16. 百度AI攻略:行驶证识别
  17. 设置随机种子的函数: srand(种子);的重要性
  18. oppo--软件测试工程师岗位面试总结(二)
  19. DeFi:数字银行的下一站?
  20. 栈溢出学习(二)Return2Libc

热门文章

  1. java threadpoolexecutor 实例_Java线程池(ThreadPoolExecutor)示例
  2. 单开双控_什么叫单开双控开关,单控开关与双控开关的区别
  3. 常用设计模式-工厂方法
  4. 如何进行性能测试(在百度工作时日常压测总结)
  5. Java 作业 金额的中文大写方式
  6. 获取微信好友数量和性别占比
  7. 计算机语言送祝福,用计算机语言祝福大家新年快乐!
  8. java 下载远程电脑文件到本地电脑
  9. 如何抠图?分享几个抠图小妙招
  10. 不仅只有微信小程序!盘点各大平台的小程序