RecycleView 实现左右列表并排
网上关于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 实现左右列表并排相关推荐
- html 如何让列表并排,html – 并排列表并排包裹太长的行
更新:我应该先阅读你的整个问题. 取下浮子:左;在< dd>上 One possible problem for beginners using this property (as I a ...
- 谁有快狐app苹果下载地址_苹果硅到底有多快?
谁有快狐app苹果下载地址 At WWDC 2020 Apple officially announced what everyone in the industry already knew: th ...
- 判断 小程序 是否 滚动到页面底部 scrolltolower_微信小程序长列表性能优化——recycle-view
背景: 第七次人口普查项目使用是微信小程序原生框架,组件是根据用户需求由项目组前端组组长封装完成的.采集小程序正式登记首页列表页面,根据腾讯老哥在sentry上的监控可以看出,列表页面前端性能比较差, ...
- RecycleView 二级列表(多级列表)
RecycleView实现二级列表(可以实现多级列表) RecyclerView做的二级列表比官方的ExpandableListView二级列表效率高一些貌似 1.自己的Adapter继承Recycl ...
- 微信小程序 — 长列表组件 recycle-view 详细教学
微信小程序 - 长列表组件 recycle-view 踩坑问题全解 写在前面 引入长列表组件 recycle-view 长列表组件 recycle-view 的使用 问题一.如何增加下拉刷新功能? 问 ...
- 一个RecycleView的强大adapter
代码地址如下: http://www.demodashi.com/demo/12218.html 前言 一般我们要在mainActivity中利用RecycleView展示一个列表数据的时候,adap ...
- Android股票列表联动
使用ScrollerView+RecycleView实现股票列表联动效果:一个可以拿来可以直接使用的解决方案,而且滑动流畅,带标题栏悬浮功能,支持整行的点击效果,支持长安事件: 效果如下图所示: 实现 ...
- RecyclerView Adapter 优雅封装搞定所有列表
转载自: 依然范特稀西 RecycleView加载列表,封装Adapter,快速高效的添加一个列表(包括单 Item 列表和多item列表). 理念 1, 构造一个通用的Adapter模版,避免每添加 ...
- 怎么改变html无序列表的字号,html无序列表代码 html5 无序列表的行距怎么设置
html语句怎么实现无序列表并排?就是两列怎么实现 无序列表并排111 无序列表并排222 css: - #list li{float:left;} float浮动就行了,最好给ol和li设定固定宽度 ...
最新文章
- 内存溢出和内存泄漏的区别、产生原因以及解决方案
- 如何预约升级鸿蒙,超过66万人预约,华为亮出真正王牌旗舰,支持优先升级鸿蒙系统...
- layui概述||layui的学习内容
- 16进制数怎么判断正负
- Java中已经存在了十几年的一个bug...
- 架构师能力升级:掌握JVM科学调优
- OC语言——————表视图
- idea中 google-java-format 插件的使用
- linux svn备份,SVN完全备份svnadmin hotcopy
- 腾讯云神图·人脸识别(Face Recognition)常见问题的解答
- qq文件未上传至平台服务器,QQ传送离线文件慢是什么原因?原因及处理方法
- 计算机黑屏论文,在家写论文电脑突然黑屏自救方案,这几个方法可以解决95%以上的电脑问题...
- 安卓使用connectbot连接centos云服务器
- 移动电子商务网站可用性-商品页面和购物车
- 统计学习方法——李航 笔记
- 百度AI攻略:行驶证识别
- 设置随机种子的函数: srand(种子);的重要性
- oppo--软件测试工程师岗位面试总结(二)
- DeFi:数字银行的下一站?
- 栈溢出学习(二)Return2Libc