Recyclerview的一些个人理解与使用(七)Recyclerview的嵌套与增加删除
来源:互联网 发布:网络体系结构的定义 编辑:程序博客网 时间:2024/06/06 19:10
目录:
Recyclerview的一些个人理解与使用(一)adapter的简单封装
Recyclerview的一些个人理解与使用(二)实现一个简单的列表界面
Recyclerview的一些个人理解与使用(三)列表中的计时器
Recyclerview的一些个人理解与使用(四)在界面中实现侧边栏效果
Recyclerview的一些个人理解与使用(五)Recyclerview的联动,时间选择的实现
Recyclerview的一些个人理解与使用(六)Recyclerview的分段加载
Recyclerview的一些个人理解与使用(七)Recyclerview的嵌套与增加删除
最近看了一阵kotlin,本来想把项目直接转为kotlin,但是有些地方一直未能成功,看来还需继续努力啊。因为目前公司项目已经比较稳定了,这次的功能也比较简单,为大家附上一般项目中比较常用两个的功能。
在项目中,有时单纯的Recyclerview并不能够满足项目的需求,往往需要一定层次的嵌套如:
大标题1:
内容,内容
大标题2:
内容,内容
大标题3:
内容,内容
这个时候对Recyclerview进行一层嵌套可以比较简单的完成需求
因为只是demo,做的比较简单,效果图如下:
思想很简单,最外层的Recyclerview的item的内容为一个textview与Recyclerview,再在子item中添加点击事件
Fragment布局:
<RelativeLayout 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/nesting_rv" android:layout_width="match_parent" android:layout_height="match_parent"/></RelativeLayout>
item布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="5dp" android:textColor="@color/blue"/> <android.support.v7.widget.RecyclerView android:id="@+id/nesting_rv" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"/></LinearLayout>
子item布局就是一个简单的textview就不放了。这里主要看item的adapter,在adapter中我们对子item的adapter添加了监听事件,并且设置了子item的数据,adapter代码:
/** * Created by ztn on 2017/6/19 */public class NestingRecyclerViewHolder extends RecyclerView.ViewHolder { private TextView textView; private RecyclerView recyclerView; private NestingRecyclerViewChildAdapter nestingRecyclerViewChildAdapter; private List<String> num; public NestingRecyclerViewHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.text); recyclerView = (RecyclerView) itemView.findViewById(R.id.nesting_rv); recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)); num = new ArrayList<>(); num.add(Math.random() + ""); num.add(Math.random() + ""); num.add(Math.random() + ""); num.add(Math.random() + ""); } public void initView(final Context context, final String string, final NestingRecyclerViewAdapter.OnClickItemListener onClickItemListener, final int position) { textView.setText(string); nestingRecyclerViewChildAdapter = new NestingRecyclerViewChildAdapter(context, num); recyclerView.setAdapter(nestingRecyclerViewChildAdapter); nestingRecyclerViewChildAdapter.setOnClickItemListener(new NestingRecyclerViewChildAdapter.OnClickItemListener() { @Override public void onClick(String string, int position) { Toast.makeText(context, string,Toast.LENGTH_SHORT).show(); } });// itemView.setOnClickListener(new View.OnClickListener() {// @Override// public void onClick(View v) {// if (onClickItemListener != null)// onClickItemListener.onClick(string, position);// }// }); }}
这里使用了StaggeredGridLayoutManager用来实现GridView效果设置也比较加单,一个参数代表的个数,另一个参数代表的排列方式,这个过程基本是Recyclerview的流程走两边,没有什么难点,下面我们来说说Recyclerview的增加删除。
Recyclerview的增加需要调用 adapter.notifyItemInserted(num) 这个方法,删除需要调用 adapter.notifyItemRemoved(num) 这个方法。在实际使用的过程中我们还会发现一个问题,就是采取了这两种操作后变化的位置之后的item的position并没有改变,这个时候需要调用 adapter.notifyItemRangeChanged(0, data.size()-num) 来重置之后位置的position,效果图如下:
主要代码:
/** * Created by Administrator on 2017/6/19 */public class AddOrDeleteFragment extends LazyFragment { AddOrDeleteHolder addOrDeleteHolder; List<String> num; MainRecyclerViewAdapter mainRecyclerViewAdapter; public static Fragment newInstance() { return new AddOrDeleteFragment(); } @Override protected void onCreateViewLazy(Bundle savedInstanceState) { super.onCreateViewLazy(savedInstanceState); setContentView(R.layout.addordelete); num = new ArrayList<>(); for (int i = 0; i < 80; i++) { num.add(i + ""); } addOrDeleteHolder = new AddOrDeleteHolder(getContentView()); mainRecyclerViewAdapter = new MainRecyclerViewAdapter(getContext(), num); addOrDeleteHolder.recyclerView.setAdapter(mainRecyclerViewAdapter); //增加 addOrDeleteHolder.increase.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { num.add(3, "增加的view"); mainRecyclerViewAdapter.notifyItemInserted(3); } }); //删除 addOrDeleteHolder.delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (addOrDeleteHolder.recyclerView.getChildCount() > 3) { num.remove(3); mainRecyclerViewAdapter.notifyItemRemoved(3); } else { Toast.makeText(getContext(), "3位置上没有view", Toast.LENGTH_SHORT).show(); } } }); addOrDeleteHolder.notify.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mainRecyclerViewAdapter.notifyItemRangeChanged(0, num.size() - 2); } }); mainRecyclerViewAdapter.setOnClickItemListener(new MainRecyclerViewAdapter.OnClickItemListener() { @Override public void onClick(String string, int position) { Toast.makeText(getContext(), "这个位置的position:" + position, Toast.LENGTH_SHORT).show(); Logger.d("当前num中的各个值:" + num.toString()); } }); }}
基本就是这些东西,实现起来也很方便。
项目地址:
https://github.com/Liveinadream/RecyclerViewDemo#recyclerviewdemo
如有疑问大家可以添加 121606151 这个qq群@Crazy(即本人)即可,欢迎大家前来交流。
- Recyclerview的一些个人理解与使用(七)Recyclerview的嵌套与增加删除
- Recyclerview的一些个人理解与使用(五)Recyclerview的联动,时间选择的实现
- Recyclerview的一些个人理解与使用(六)Recyclerview的分段加载
- Recyclerview的一些个人理解与使用(一)adapter的简单封装
- Recyclerview的一些个人理解与使用(二)实现一个简单的列表界面
- Recyclerview的一些个人理解与使用(三)列表中的计时器
- Recyclerview的一些个人理解与使用(四)在界面中实现侧边栏效果
- 谈谈RecyclerView的用法与添加Header的个人理解
- RecyclerView的嵌套使用
- 与ListView不同,RecyclerView的嵌套解决
- ScrollView与ListView RecyclerView的嵌套
- RecyclerView与CardView的使用
- RecyclerView的使用与解析
- RecyclerView与CardView的使用
- RecyclerView与CardView的使用
- RecyclerView与CardView的使用
- Recyclerview的介绍与使用
- RecyclerView的使用和与ListView的一些不同之处
- 最长公共子序列LCS和最长子串SLCS
- https请求单向认证
- 使用远程线程注入的三个函数CreateRemoteThread、NtCreateThreadEx、RtlCreateUserThread
- CODEV和zemax tilt反射镜建立和对比3
- JMS之——ActiveMQ支持两种事务
- Recyclerview的一些个人理解与使用(七)Recyclerview的嵌套与增加删除
- php实现分页显示功能
- Deep Learning深入浅出
- (二)跑马灯的两种实现方式
- 浅谈Redis
- STL学习笔记-容器
- 第4.1章 scrapy之web工程
- 0630工作tips
- 功能展示——图片选择器、图片预览、9宫格展示、图片选择器