国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android中RecyclerView實現(xiàn)Item添加和刪除的代碼示例

2019-10-22 18:28:32
字體:
供稿:網(wǎng)友

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

先上效果圖:

Android,實現(xiàn)Item添加和刪除,Item添加和刪除

RecyclerView簡介:

RecyclerView用以下兩種方式簡化了數(shù)據(jù)的展示和處理:

1. 使用LayoutManager來確定每一個item的排列方式。

2. 為增加和刪除項目提供默認(rèn)的動畫效果,也可以自定義。

RecyclerView項目結(jié)構(gòu)如下:

Android,實現(xiàn)Item添加和刪除,Item添加和刪除

Adapter:使用RecyclerView之前,你需要一個繼承自RecyclerView.Adapter的適配器,作用是將數(shù)據(jù)與每一個條目的界面進(jìn)行綁定。

LayoutManager:用來確定每一個item如何進(jìn)行排列擺放,何時展示和隱藏。

RecyclerView-Item添加:

在適配器中加入如下代碼:

  // 添加數(shù)據(jù)  public void addData(int position) {//   在list中添加數(shù)據(jù),并通知條目加入一條    list.add(position, "我是商品" + position);    //添加動畫    notifyItemInserted(position);  }

調(diào)用時:

 adapter.addData(list.size());

RecyclerView-Item刪除:

在適配器中加入如下代碼:

  // 刪除數(shù)據(jù)  public void removeData(int position) {    list.remove(position);    //刪除動畫    notifyItemRemoved(position);    notifyDataSetChanged();  }

調(diào)用時:

//Item里的刪除   removeData(position);//外面的控件的刪除adapter. removeData(position);

需要注意的是我再刪除動畫的下面加了notifyDataSetChanged();代碼,因為我們在刪除條目時不一定是按照順序刪除的,也許是錯位刪除,這樣會因為position的原因造成角標(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)動畫          adapter.addData(list.size());    }    });  }  private void initRecycle() {    // 縱向滑動    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);    mRecyclerView.setLayoutManager(linearLayoutManager);//   獲取數(shù)據(jù),向適配器傳數(shù)據(jù),綁定適配器    list = initData();    adapter = new RecycleAdapter(MainActivity.this, list);    mRecyclerView.setAdapter(adapter);//   添加動畫    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)動畫          removeData(position);        }      }    });  }  @Override  public int getItemCount() {    return list.size();  }  // 添加數(shù)據(jù)  public void addData(int position) {//   在list中添加數(shù)據(jù),并通知條目加入一條    list.add(position, "我是商品" + position);    //添加動畫    notifyItemInserted(position);  }  // 刪除數(shù)據(jù)  public void removeData(int position) {    list.remove(position);    //刪除動畫    notifyItemRemoved(position);    notifyDataSetChanged();  }  /**   * ViewHolder的類,用于緩存控件   */  class MyViewHolder extends RecyclerView.ViewHolder {    TextView tv, tv_delete;    //因為刪除有可能會刪除中間條目,然后會造成角標(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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 醴陵市| 乌鲁木齐县| 陆河县| 潜山县| 玉屏| 彭阳县| 宜阳县| 深州市| 开远市| 罗源县| 麻栗坡县| 亳州市| 淳安县| 即墨市| 潍坊市| 云龙县| 高邑县| 观塘区| 天峻县| 嘉善县| 乌苏市| 合江县| 镇宁| 庆云县| 旬邑县| 额尔古纳市| 翁牛特旗| 镇安县| 锡林郭勒盟| 塘沽区| 尤溪县| 阿拉善盟| 武平县| 绥中县| 阳原县| 双桥区| 化州市| 宁安市| 巴东县| 三穗县| 长海县|