日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【RecyclerView】 十一、RecyclerView 数据更新 ( 删除单条数据 | 批量删除数据 )

發(fā)布時(shí)間:2025/6/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【RecyclerView】 十一、RecyclerView 数据更新 ( 删除单条数据 | 批量删除数据 ) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、刪除單條數(shù)據(jù)
  • 二、批量刪除數(shù)據(jù)
  • 三、完整代碼示例
  • 四、RecyclerView 相關(guān)資料





一、刪除單條數(shù)據(jù)



刪除單條數(shù)據(jù) : 調(diào)用 RecyclerView.Adapter 的 void notifyItemRemoved(int position) 方法 , 傳入的參數(shù)是被刪除元素的索引 ( 刪除之前的索引值 ) ;

該方法的作用是通知任何被注冊(cè)的觀察者 , position 位置的 item 元素對(duì)應(yīng)的數(shù)據(jù)被從數(shù)據(jù)集中刪除 ;

該位置之后的元素 ( 原來(lái)的位置是 oldPosition ) 目前在 oldPosition - 1 位置 ;


int position 參數(shù) : 當(dāng)前 RecyclerView 列表中被移出的 item 元素索引 , 也就是說(shuō)之前的數(shù)據(jù)集合中被移出的數(shù)據(jù)索引 ;


注意 : 調(diào)用該方法后 , 只會(huì)刷新與該位置相關(guān)的 item 元素 , 不會(huì)刷新其它元素 , 即使數(shù)據(jù)改變了 , 也不會(huì)刷新 ;


代碼示例 : 刪除第 000 個(gè)元素 , 后續(xù)元素會(huì)依次遞進(jìn)補(bǔ)充上去 , 有相應(yīng)的動(dòng)畫(huà)觸發(fā) ;

// 刪除第 0 個(gè)元素names.remove(0);// 通知適配器adapter.notifyItemRemoved(0);

RecyclerView.Adapter.notifyItemRemoved(int position) 函數(shù)原型 : 該函數(shù)定義在 RecyclerView 的內(nèi)部類(lèi) Adapter 中 ;

public class RecyclerView extends ViewGroup implements ScrollingView,NestedScrollingChild2, NestedScrollingChild3 {public abstract static class Adapter<VH extends ViewHolder> {/*** 通知任何被注冊(cè)的觀察者 , position 位置的 item 元素對(duì)應(yīng)的數(shù)據(jù)被從數(shù)據(jù)集中刪除 ;* 該位置之后的元素 ( 原來(lái)的位置是 oldPosition ) 目前在 oldPosition - 1 位置 ; ** 這是一個(gè)結(jié)構(gòu)性的變化事件 ; * 表示在數(shù)據(jù)集中的其它元素仍然被認(rèn)為是最新的數(shù)據(jù) , 這些數(shù)據(jù)不會(huì)被重新綁定 , * 盡管它們的位置已經(jīng)發(fā)生了變化 ;** @param position 當(dāng)前 RecyclerView 列表中被移出的 item 元素索引 ;** @see #notifyItemRangeRemoved(int, int)*/public final void notifyItemRemoved(int position) {mObservable.notifyItemRangeRemoved(position, 1);}} }

運(yùn)行效果 : 動(dòng)畫(huà)效果是系統(tǒng)自帶的 , 可以自己實(shí)現(xiàn) ;





二、批量刪除數(shù)據(jù)



批量刪除數(shù)據(jù) : 調(diào)用 RecyclerView.Adapter 的 void notifyItemRangeInserted(int positionStart, int itemCount) 方法 , 傳入的參數(shù)是被刪除的元素的首個(gè)索引 , 以及插入元素的個(gè)數(shù) ;

該方法的作用是通知任何被注冊(cè)的觀察者 , 從 positionStart 位置開(kāi)始的的 itemCount 個(gè) item 元素對(duì)應(yīng)的數(shù)據(jù)被從數(shù)據(jù)集中刪除 ;

該位置之后的元素 ( 原來(lái)的位置是 oldPosition ) 目前在 oldPosition - itemCount 位置 ;


參數(shù)說(shuō)明 :

int positionStart 參數(shù) : 被刪除的元素在原數(shù)據(jù)集中首個(gè)元素的位置索引 ; ( 舊的數(shù)據(jù)集中的索引位置 )

int itemCount 參數(shù) : 數(shù)據(jù)集中被刪除元素個(gè)數(shù) ;


注意 : 調(diào)用該方法后 , 只會(huì)刷新與該位置相關(guān)的 item 元素 , 不會(huì)刷新其它元素 , 即使數(shù)據(jù)改變了 , 也不會(huì)刷新 ; 也就是說(shuō) RecyclerView 只刷新涉及到的 positionStart ~ positionStart + itemCount 之間的這幾個(gè)元素 , RecyclerView 中的其它 item 元素不變 ;


代碼示例 : 刪除前 333 個(gè)數(shù)據(jù) , 通知適配器 , 原數(shù)據(jù)集中的從第 000 個(gè)元素開(kāi)始的 333 個(gè)數(shù)據(jù)元素被刪除了 ;

// 刪除第 0 ~ 2 個(gè)元素names.remove(0);names.remove(0);names.remove(0);// 通知適配器adapter.notifyItemRangeRemoved(0, 3);

RecyclerView.Adapter.notifyItemRangeRemoved(int positionStart, int itemCount) 函數(shù)原型 : 該函數(shù)定義在 RecyclerView 的內(nèi)部類(lèi) Adapter 中 ;

public class RecyclerView extends ViewGroup implements ScrollingView,NestedScrollingChild2, NestedScrollingChild3 {public abstract static class Adapter<VH extends ViewHolder> {/*** 通知任何被注冊(cè)的觀察者 , 從 positionStart 位置開(kāi)始的的 itemCount 個(gè) item 元素對(duì)應(yīng)的數(shù)據(jù)被從數(shù)據(jù)集中刪除 ;* 該位置之后的元素 ( 原來(lái)的位置是 oldPosition ) 目前在 oldPosition - itemCount 位置 ; * * 這是一個(gè)結(jié)構(gòu)性的變化事件 ; * 表示在數(shù)據(jù)集中的其它元素仍然被認(rèn)為是最新的數(shù)據(jù) , 這些數(shù)據(jù)不會(huì)被重新綁定 , * 盡管它們的位置已經(jīng)發(fā)生了變化 ;* 也就是說(shuō) RecyclerView 只刷新涉及到的 positionStart ~ positionStart + itemCount 之間的這幾個(gè)元素 , * 其它元素不變 ; ** @param positionStart 被刪除的元素在原數(shù)據(jù)集中首個(gè)元素的位置索引 ;* @param itemCount 數(shù)據(jù)集中被刪除元素個(gè)數(shù) ;*/public final void notifyItemRangeRemoved(int positionStart, int itemCount) {mObservable.notifyItemRangeRemoved(positionStart, itemCount);}} }

運(yùn)行效果 : 動(dòng)畫(huà)效果是系統(tǒng)自帶的 , 可以自己實(shí)現(xiàn) ;





三、完整代碼示例



完整代碼示例 僅做參考 :

package kim.hsl.recyclerview;import android.graphics.Color; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.StaggeredGridLayoutManager;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {/*** 數(shù)據(jù)源*/private ArrayList<String> names = new ArrayList<String>();/*** 適配器*/private Adapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化數(shù)據(jù)initData();//1 . 從布局中獲取 RecyclerViewRecyclerView recycler_view = findViewById(R.id.recycler_view);//2 . 創(chuàng)建并設(shè)置布局管理器//創(chuàng)建布局管理器StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(4,RecyclerView.VERTICAL);//設(shè)置布局管理器recycler_view.setLayoutManager(layoutManager);// 設(shè)置邊距recycler_view.addItemDecoration(new ItemDecoration());//3 . 創(chuàng)建并設(shè)置列表適配器adapter = new Adapter();recycler_view.setAdapter(adapter);// 初始化點(diǎn)擊事件initClick();}/*** 初始化數(shù)據(jù)*/private void initData(){names.add("宋江");names.add("盧俊義");names.add("吳用");names.add("公孫勝");names.add("關(guān)勝");names.add("林沖");names.add("秦明");names.add("呼延灼");names.add("花榮");names.add("柴進(jìn)");names.add("李應(yīng)");names.add("朱仝");names.add("魯智深");names.add("武松");names.add("董平");names.add("張清");names.add("楊志");names.add("徐寧");names.add("索超");}void initClick(){// 增加單個(gè)數(shù)據(jù)findViewById(R.id.insert_single).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 在集合開(kāi)始添加一個(gè)元素names.add(0, "戴宗");// 通知適配器新元素添加adapter.notifyItemInserted(0);}});// 增加多個(gè)數(shù)據(jù)findViewById(R.id.insert_multi).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 在集合開(kāi)始添加多個(gè)元素names.add(0, "戴宗");names.add(0, "劉唐");names.add(0, "李逵");// 通知適配器多個(gè)新元素添加adapter.notifyItemRangeInserted(0, 3);}});// 刪除單個(gè)數(shù)據(jù)findViewById(R.id.delete_single).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 刪除第 0 個(gè)元素names.remove(0);// 通知適配器adapter.notifyItemRemoved(0);}});// 刪除多個(gè)數(shù)據(jù)findViewById(R.id.delete_multi).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 刪除第 0 ~ 2 個(gè)元素names.remove(0);names.remove(0);names.remove(0);// 通知適配器adapter.notifyItemRangeRemoved(0, 3);}});// 修改單個(gè)數(shù)據(jù)findViewById(R.id.modify_single).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 替換第 0 個(gè)元素names.set(0, "宋江江");// 通知適配器adapter.notifyItemChanged(0);}});// 修改多個(gè)數(shù)據(jù)findViewById(R.id.modify_multi).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 替換第 0, 1, 2 個(gè)元素names.set(0, "宋江江");names.set(1, "盧俊俊");names.set(2, "吳用用");// 通知適配器adapter.notifyItemRangeChanged(0, 3);}});// 移動(dòng)數(shù)據(jù)findViewById(R.id.move_single).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 先移除第 0 個(gè)names.remove(0);// 然后在第 7 個(gè)位置插入, 此時(shí)變?yōu)榈?7 個(gè)元素names.add(7, "宋江");// 通知適配器adapter.notifyItemMoved(0, 7);}});}/*** RecyclerView 適配器*/public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View root_view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_recyclerview, parent, false);return new ViewHolder(root_view);}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {holder.text.setText("" + names.get(position));}@Overridepublic int getItemCount() {return names.size();}public class ViewHolder extends RecyclerView.ViewHolder {TextView text;public ViewHolder(@NonNull View itemView) {super(itemView);text = itemView.findViewById(R.id.text);}}}}



四、RecyclerView 相關(guān)資料



官方文檔 :

使用 RecyclerView 創(chuàng)建動(dòng)態(tài)列表 : https://developer.android.google.cn/guide/topics/ui/layout/recyclerview

高級(jí) RecyclerView 自定義 : https://developer.android.google.cn/guide/topics/ui/layout/recyclerview-custom

RecyclerView 官方文檔 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView

RecyclerView.Adapter 官方文檔 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView.Adapter

RecyclerView.ViewHolder 官方文檔 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView.ViewHolder

RecyclerView.ItemDecoration 官方文檔 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView.ItemDecoration


代碼示例 :

GitHub 源碼地址 : https://github.com/han1202012/001_RecyclerView

博客源碼快照 : https://download.csdn.net/download/han1202012/14984775

( 使用 Android Studio 打開(kāi) )

總結(jié)

以上是生活随笔為你收集整理的【RecyclerView】 十一、RecyclerView 数据更新 ( 删除单条数据 | 批量删除数据 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。