Android中RecyclerView實(shí)現(xiàn)Item添加和刪除的代碼示例
本文介紹了Android中RecyclerView實(shí)現(xiàn)Item添加和刪除的代碼示例,分享給大家,具體如下:
先上效果圖:

RecyclerView簡(jiǎn)介:
RecyclerView用以下兩種方式簡(jiǎn)化了數(shù)據(jù)的展示和處理:
1. 使用LayoutManager來(lái)確定每一個(gè)item的排列方式。
2. 為增加和刪除項(xiàng)目提供默認(rèn)的動(dòng)畫(huà)效果,也可以自定義。
RecyclerView項(xiàng)目結(jié)構(gòu)如下:

Adapter:使用RecyclerView之前,你需要一個(gè)繼承自RecyclerView.Adapter的適配器,作用是將數(shù)據(jù)與每一個(gè)條目的界面進(jìn)行綁定。
LayoutManager:用來(lái)確定每一個(gè)item如何進(jìn)行排列擺放,何時(shí)展示和隱藏。
RecyclerView-Item添加:
在適配器中加入如下代碼:
// 添加數(shù)據(jù)
public void addData(int position) {
// 在list中添加數(shù)據(jù),并通知條目加入一條
list.add(position, "我是商品" + position);
//添加動(dòng)畫(huà)
notifyItemInserted(position);
}
調(diào)用時(shí):
adapter.addData(list.size());
RecyclerView-Item刪除:
在適配器中加入如下代碼:
// 刪除數(shù)據(jù)
public void removeData(int position) {
list.remove(position);
//刪除動(dòng)畫(huà)
notifyItemRemoved(position);
notifyDataSetChanged();
}
調(diào)用時(shí):
//Item里的刪除 removeData(position); //外面的控件的刪除 adapter. removeData(position);
需要注意的是我再刪除動(dòng)畫(huà)的下面加了notifyDataSetChanged();代碼,因?yàn)槲覀冊(cè)趧h除條目時(shí)不一定是按照順序刪除的,也許是錯(cuò)位刪除,這樣會(huì)因?yàn)閜osition的原因造成角標(biāo)越界異常,所以需要整體刷新一下。
整體代碼:
**1.MainActivity **
package com.android.qzs.qzsrecycleview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private ImageView iv_add;
private RecycleAdapter adapter;
private List<String> list = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initRecycle();
iv_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 添加自帶默認(rèn)動(dòng)畫(huà)
adapter.addData(list.size());
}
});
}
private void initRecycle() {
// 縱向滑動(dòng)
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(linearLayoutManager);
// 獲取數(shù)據(jù),向適配器傳數(shù)據(jù),綁定適配器
list = initData();
adapter = new RecycleAdapter(MainActivity.this, list);
mRecyclerView.setAdapter(adapter);
// 添加動(dòng)畫(huà)
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
}
private void initView() {
iv_add = (ImageView) findViewById(R.id.iv_add);
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
}
protected ArrayList<String> initData() {
ArrayList<String> mDatas = new ArrayList<String>();
for (int i = 0; i < 1; i++) {
mDatas.add("我是商品" + i);
}
return mDatas;
}
}
2.RecycleAdapter
package com.android.qzs.qzsrecycleview;
import android.content.Context;
import android.support.design.widget.Snackbar;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by qzs on 2017/9/04.
*/
class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.MyViewHolder> {
private Context context;
private List<String> list;
public RecycleAdapter(Context context, List<String> list) {
this.context = context;
this.list = list;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
context).inflate(R.layout.item_home, parent,
false));
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.tv.setText(list.get(position));
holder.tv_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (list.size() == 1) {
Snackbar.make(v, "此條目不能刪除", Snackbar.LENGTH_SHORT).show();
} else {
// 刪除自帶默認(rèn)動(dòng)畫(huà)
removeData(position);
}
}
});
}
@Override
public int getItemCount() {
return list.size();
}
// 添加數(shù)據(jù)
public void addData(int position) {
// 在list中添加數(shù)據(jù),并通知條目加入一條
list.add(position, "我是商品" + position);
//添加動(dòng)畫(huà)
notifyItemInserted(position);
}
// 刪除數(shù)據(jù)
public void removeData(int position) {
list.remove(position);
//刪除動(dòng)畫(huà)
notifyItemRemoved(position);
notifyDataSetChanged();
}
/**
* ViewHolder的類(lèi),用于緩存控件
*/
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv, tv_delete;
//因?yàn)閯h除有可能會(huì)刪除中間條目,然后會(huì)造成角標(biāo)越界,所以必須整體刷新一下!
public MyViewHolder(View view) {
super(view);
tv = (TextView) view.findViewById(R.id.id_num);
tv_delete = (TextView) view.findViewById(R.id.tv_delete);
}
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android RecyclerView滑動(dòng)刪除和拖動(dòng)排序
- Android RecyclerView item選中放大被遮擋問(wèn)題詳解
- Android RecyclerView實(shí)現(xiàn)多種item布局的方法
- Android使用CardView作為RecyclerView的Item并實(shí)現(xiàn)拖拽和左滑刪除
- Android中RecyclerView的item寬高問(wèn)題詳解
- Android RecyclerView顯示Item布局不一致解決辦法
- Android RecyclerView的Item點(diǎn)擊事件實(shí)現(xiàn)整理
- Android 中RecyclerView多種item布局的寫(xiě)法(頭布局+腳布局)
- Android RecyclerView自由拖動(dòng)item的實(shí)現(xiàn)代碼
相關(guān)文章
Android編程實(shí)現(xiàn)項(xiàng)目中異常捕獲及對(duì)應(yīng)Log日志文件保存功能
這篇文章主要介紹了Android編程實(shí)現(xiàn)項(xiàng)目中異常捕獲及對(duì)應(yīng)Log日志文件保存功能,涉及Android異常處理、日志讀寫(xiě)及權(quán)限控制等相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
Android仿支付寶中余額寶的數(shù)字動(dòng)畫(huà)效果
最近因?yàn)楣ぷ餍枰叻掠囝~寶數(shù)字動(dòng)畫(huà)效果,達(dá)到炫酷的數(shù)字動(dòng)畫(huà)效果,所以寫(xiě)出了分享給大家,有需要的朋友可以直接拿來(lái)用,下面一起來(lái)看看。2016-08-08
Android系統(tǒng)的五種數(shù)據(jù)存儲(chǔ)形式實(shí)例(一)
Android系統(tǒng)有五種數(shù)據(jù)存儲(chǔ)形式,分別是文件存儲(chǔ)、SP存儲(chǔ)、數(shù)據(jù)庫(kù)存儲(chǔ)、contentprovider 內(nèi)容提供者、網(wǎng)絡(luò)存儲(chǔ)。本篇文章詳解的介紹了每種數(shù)據(jù)存儲(chǔ)的用法,有興趣的可以了解一下。2016-12-12
Android自定義實(shí)現(xiàn)側(cè)滑菜單效果
這篇文章主要為大家詳細(xì)介紹了Android自定義實(shí)現(xiàn)側(cè)滑菜單效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
Android使用PullToRefresh完成ListView下拉刷新和左滑刪除功能
ListView下刷新刷功能相信從事Android開(kāi)發(fā)的猿友們并不陌生,本文就帶領(lǐng)一些剛?cè)腴T(mén)android的朋友或者一起愛(ài)分享的朋友來(lái)簡(jiǎn)單的實(shí)現(xiàn)ListView的下拉刷新和左滑刪除效果。感興趣的朋友一起看看吧2016-11-11
Android實(shí)現(xiàn)多線(xiàn)程斷點(diǎn)下載的方法
這篇文章主要介紹了Android實(shí)現(xiàn)多線(xiàn)程斷點(diǎn)下載的方法,可實(shí)現(xiàn)開(kāi)始、暫停下載及百分比進(jìn)度條等功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-05-05
Android 實(shí)現(xiàn)帶進(jìn)度條的WebView的實(shí)例
這篇文章主要介紹了Android 實(shí)現(xiàn)帶進(jìn)度條的WebView的實(shí)例的相關(guān)資料,這里介紹了Webview加載網(wǎng)頁(yè)的方法及帶進(jìn)度的Drawable文件view_progress_webview的實(shí)現(xiàn),需要的朋友可以參考下2017-07-07
Android最簡(jiǎn)單的限制輸入方法(只包含數(shù)字、字母和符號(hào))
這篇文章主要給大家介紹了關(guān)于Android最簡(jiǎn)單的限制輸入的實(shí)現(xiàn)方法,限制輸入框只能輸入數(shù)字、字母和符號(hào),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看 吧2018-11-11
android仿華為手機(jī)懸浮窗設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了android仿華為手機(jī)懸浮窗設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08

