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布局上添加两个按钮:


 

然后在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之间的分割线,关于动画效果和分割线会在单独的篇幅作记录

你可能感兴趣的:(RecyclerView(三)数据更改)