Android中RecyclerView實(shí)現(xiàn)Item添加和刪除的代碼示例
本文介紹了Android中RecyclerView實(shí)現(xiàn)Item添加和刪除的代碼示例,分享給大家,具體如下:
先上效果圖:
RecyclerView簡介:
RecyclerView用以下兩種方式簡化了數(shù)據(jù)的展示和處理:
1. 使用LayoutManager來確定每一個(gè)item的排列方式。
2. 為增加和刪除項(xiàng)目提供默認(rèn)的動(dòng)畫效果,也可以自定義。
RecyclerView項(xiàng)目結(jié)構(gòu)如下:
Adapter:使用RecyclerView之前,你需要一個(gè)繼承自RecyclerView.Adapter的適配器,作用是將數(shù)據(jù)與每一個(gè)條目的界面進(jìn)行綁定。
LayoutManager:用來確定每一個(gè)item如何進(jìn)行排列擺放,何時(shí)展示和隱藏。
RecyclerView-Item添加:
在適配器中加入如下代碼:
// 添加數(shù)據(jù) public void addData(int position) { // 在list中添加數(shù)據(jù),并通知條目加入一條 list.add(position, "我是商品" + position); //添加動(dòng)畫 notifyItemInserted(position); }
調(diào)用時(shí):
adapter.addData(list.size());
RecyclerView-Item刪除:
在適配器中加入如下代碼:
// 刪除數(shù)據(jù) public void removeData(int position) { list.remove(position); //刪除動(dòng)畫 notifyItemRemoved(position); notifyDataSetChanged(); }
調(diào)用時(shí):
//Item里的刪除 removeData(position); //外面的控件的刪除 adapter. removeData(position);
需要注意的是我再刪除動(dòng)畫的下面加了notifyDataSetChanged();代碼,因?yàn)槲覀冊趧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)畫 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)畫 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)畫 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)畫 notifyItemInserted(position); } // 刪除數(shù)據(jù) public void removeData(int position) { list.remove(position); //刪除動(dòng)畫 notifyItemRemoved(position); notifyDataSetChanged(); } /** * ViewHolder的類,用于緩存控件 */ 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); } } }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android RecyclerView滑動(dòng)刪除和拖動(dòng)排序
- Android RecyclerView item選中放大被遮擋問題詳解
- Android RecyclerView實(shí)現(xiàn)多種item布局的方法
- Android使用CardView作為RecyclerView的Item并實(shí)現(xiàn)拖拽和左滑刪除
- Android中RecyclerView的item寬高問題詳解
- Android RecyclerView顯示Item布局不一致解決辦法
- Android RecyclerView的Item點(diǎn)擊事件實(shí)現(xiàn)整理
- Android 中RecyclerView多種item布局的寫法(頭布局+腳布局)
- Android RecyclerView自由拖動(dòng)item的實(shí)現(xiàn)代碼
相關(guān)文章
android開發(fā)基礎(chǔ)教程—SharedPreferences讀寫
本文介紹SharedPreferences的讀與寫的實(shí)現(xiàn)思路,感興趣的朋友可以了解下2013-01-01Android自定義view實(shí)現(xiàn)動(dòng)態(tài)柱狀圖
這篇文章主要為大家詳細(xì)介紹了Android自定義view實(shí)現(xiàn)動(dòng)態(tài)柱狀圖的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08android自定義View實(shí)現(xiàn)圓環(huán)顏色選擇器
這篇文章主要介紹了android自定義View實(shí)現(xiàn)圓環(huán)顏色選擇器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06Android中Activity的四種啟動(dòng)模式和onNewIntent()
android 中activity的啟動(dòng)模式分為四種,(standard、singleTop、singTask、singleInstance),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-08-08Android 點(diǎn)擊editview以外位置實(shí)現(xiàn)隱藏輸入法
這篇文章主要介紹了Android 點(diǎn)擊editview以外位置實(shí)現(xiàn)隱藏輸入法的相關(guān)資料,需要的朋友可以參考下2017-06-06android 選項(xiàng)卡(TabHost)如何放置在屏幕的底部
如何將TAB放置在屏幕的底端,有很多的新手都想實(shí)現(xiàn)這種效果,本文搜集整理了一些,感興趣的朋友可以參考下哦2013-01-01Android miniTwitter登錄界面開發(fā)實(shí)例
這篇文章主要為大家詳細(xì)介紹了Android miniTwitter登錄界面開發(fā)實(shí)例,感興趣的小伙伴們可以參考一下2016-04-04