RecycleView 实现左右列表并排
来源:互联网 发布:广州轩辕网络怎么样 编辑:程序博客网 时间:2024/05/17 07:25
网上关于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
1 0
- RecycleView 实现左右列表并排
- viewPager + recycleView 实现左右滑动
- recycleview实现分组列表
- div如何实现左右两个panel并排,而且高度一致
- 用一个RecycleView实现订单列表页面
- 并排列表listview
- Css中实现两个DIV左右并排摆放,且自动按比例伸缩(示例)
- Css中实现两个DIV左右并排摆放,且自动按比例伸缩(示例)
- js实现左右列表内容交换传递
- jquery 实现左右下拉列表 选项 移动
- dhtmlxgrid实现左右列表数据移动
- 使用swipemenulistview实现列表的左右滑动
- 使用swipemenulistview实现列表的左右滑动
- jQuery 实现左右Select列表数据互换
- Fragment实现左右新闻列表和详情
- jquery实现左右列表项跳跃
- 使用swipemenulistview实现列表的左右滑动
- 下拉列表的左右选择的实现
- 一个tomcat多个实例问题
- 安装PHP-FPM
- 使用jar包get、post方式提交
- CODEVS 1063合并果子
- RC微分积分电路 RC滤波电路 RC脉冲分压器 RC耦合电路 good
- RecycleView 实现左右列表并排
- gpio
- JAX-WS构建简单webservice部署到tomcat上
- php curl长连接
- 【手把手教你树莓派3 (六)】使用 motion 和 mjpg 做视频监控器
- linux内核面试题
- 可伸缩的文本控件ExpandTextView
- 利用spring中的FileCopyUtils.copy()复制文件
- 第一篇博客