RecyclerView(三)数据更改

在上一篇文章“RecyclerView(二)设置监听”中,已经介绍如何为RecyclerView的item添加点击和长按事件的监听器,但是监听这些事件肯定得做某些操作,不然监听了也没有什么意义,这篇文章就记录一下如何对RecyclerView的数据进行操作,大家可以结合点击事件来实现点击修改数据或者长按删除数据等,同样,这篇文章也是建立在之前的代码基础之上的。
RecyclerView具有高度自由性,其中一个原因也是它可以进行局部刷新,所以想往RecyclerView的Adapter中增、删、改单个数据是很方便的,官方API为我们提供了以下方法:

//该方法用于当增加一个数据的时候,position表示新增数据显示的位置
final void notifyItemInserted(int position)
 
//该方法用于删除一个数据的时候,position表示数据删除的位置
final void notifyItemRemoved(int position)
 
//该方法表示所在position对应的item位置不会改变,但是该item内容发生变化
final void notifyItemChanged(int position)
 
//该方法一般用于:适配器之前装载的数据大部分已经过时了,需要重新更新数据
//调用该方法的时候,recyclerView会重新计算子item及所有子item重新布局
//出于效率考虑,官方建议用更加精确的方法(比如上面三个方法)来取代这个方法
final void notifyDataSetChanged()

这几个方法还是很容易理解的,然后我们就可以在TestAdapter增加几个方法:

//移除数据
public void removeData(int position) {
stringList.remove(position);
notifyItemRemoved(position);
}
 
//新增数据
public void addData(int position) {
stringList.add(position, "Add One");
notifyItemInserted(position);
}
 
//更改某个位置的数据
public void changeData(int position) {
stringList.set(position, "Item " + position + " has changed");
notifyItemChanged(position);
}

在原来的MainActivity.xml布局上添加两个按钮:

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
 
<Button
android:id="@+id/btn_add"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="add" />
 
<Button
android:id="@+id/btn_change"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="change" />
</LinearLayout>

然后在MainActivity中处理一下这两个Button的点击事件,调用TestAdapter中的addData()和changeData()方法:

rvTest.addOnItemTouchListener(new RecyclerViewClickListener(this, rvTest,
                new RecyclerViewClickListener.OnItemClickListener() {
                    @Override
                    public void onItemClick(View view, int position) {
                        Toast.makeText(MainActivity.this, "Click " + getList().get(position), Toast.LENGTH_SHORT).show();
                    }
 
                    @Override
                    public void onItemLongClick(View view, int position) {
                        mTestAdapter.removeData(position);
                        Toast.makeText(MainActivity.this, "Remove " + getList().get(position), Toast.LENGTH_SHORT).show();
                    }
                }));

重新运行程序,应该可以看到下面效果:


添加一条数据.png

修改.png

移除.png

可以看到,数据被正确的增、删、改了。而且这增删改的过程中,不是很突兀的直接变化,而是有一个小动画效果,使得看起来很舒服,它就是使用了RecyclerView默认提供的动画效果。

//这行代码不是必须的,因为RecyclerView会默认使用
rvTest.setItemAnimator(new DefaultItemAnimator());

还有item之间的分割线,关于动画效果和分割线会在单独的篇幅作记录

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,663评论 25 709
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 14,529评论 2 59
  • 【Android 控件 RecyclerView】 概述 RecyclerView是什么 从Android 5.0...
    Rtia阅读 308,301评论 27 440
  • 内容 抽屉菜单 ListView WebView SwitchButton 按钮 点赞按钮 进度条 TabLayo...
    小狼W阅读 5,519评论 0 10
  • 我是一个比较怀旧的人,网上说这样子的人比较感性,不适合在社会上生存,不可否认有一定的道理。可是工作本来就很大...
    小小财务阅读 3,414评论 3 3

友情链接更多精彩内容