最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Android為RecyclerView增加監(jiān)聽以及數(shù)據(jù)混亂的小坑

 更新時間:2017年04月22日 11:22:20   投稿:jingxian  
下面小編就為大家?guī)硪黄獪\談Android為RecyclerView增加監(jiān)聽以及數(shù)據(jù)混亂的小坑。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

為 RecyclerView增加監(jiān)聽

1、在實現(xiàn)好的MyAdapter中寫內(nèi)部接口:

public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {
  this.onItemLongClickListener = onItemLongClickListener;
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
  this.onItemClickListener = onItemClickListener;
}
<!--點擊監(jiān)聽-->
public interface OnItemClickListener {
  void onItemClick(View view, int pos);
}

<!--長按監(jiān)聽-->
public interface OnItemLongClickListener {
  void onItemLongClick(View view, int position);
}

2、繼續(xù)在MyAdapter中增加以下代碼:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

private OnItemClickListener onItemClickListener;
private OnItemLongClickListener onItemLongClickListener;
      ......

@Override
public void onBindViewHolder(ViewHolder holder, int position) {

  final int pos = holder.getLayoutPosition();
  holder.mTextView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
      if (onItemClickListener != null)
        onItemClickListener.onItemClick(view, pos);
    }
  });

  holder.mTextView.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View view) {
      if (onItemLongClickListener != null) {
        onItemLongClickListener.onItemLongClick(view, pos);
      }
      return true;
    }
  });

}
}

以上代碼是接口一般的寫法,沒什么難度,需要注意的是幾個局部刷新的方法。

3、為了將性能提升至極致,RecyclerView的視圖中某個item數(shù)據(jù)變化時,RecyclerView.Adapter提供幾個局部刷新數(shù)據(jù)視圖的方法:

//該方法用于當(dāng)增加一個數(shù)據(jù)的時候,position表示新增數(shù)據(jù)顯示的位置
final void notifyItemInserted(int position)

//該方法用于刪除一個數(shù)據(jù)的時候,position表示數(shù)據(jù)刪除的位置
final void notifyItemRemoved(int position)

//該方法表示所在position對應(yīng)的item位置不會改變,但是該item內(nèi)容發(fā)生變化
final void notifyItemChanged(int position)

//當(dāng)然也還有老方法全部刷新,該方法一般用于:適配器之前裝載的數(shù)據(jù)大部分已經(jīng)過時了,需要重新更新數(shù)據(jù)調(diào)用 
//該方法的時候,recyclerView會重新計算子item及所有子item重新布局,簡單但是效率低并且不帶默認(rèn)的動畫:

final void notifyDataSetChanged()

出于效率考慮,官方建議用更加精確的方法(比如上面三個方法)來取代這個方法:

①.在RecyclerView.ViewHolder中說提及position(下標(biāo))時,有兩種情況:

i.由ViewHolder的 getLayoutPosition() 方法返回的,是視圖中 itemView 的下標(biāo)

i.由ViewHolder的 getAdapterPosition() 方法返回的,是Adapter數(shù)據(jù)集(如ArrayList) data元素 的下標(biāo).

正常時,第幾個itemView上顯示地接個data的內(nèi)容,兩者一一對應(yīng)。

②. 但是在使用局部刷新的幾個方法時要注意,我們知道,一個數(shù)據(jù)集比如ArrayList,移除某個元素時,它后面的元素會向前填充,所以后面每個元素的下標(biāo)都會減一;

③. 然而對于 getLayoutPosition() 來講,當(dāng)我們用 notifyItemInserted 方法移除掉一個itemView時,視圖上看后面的itemView會擠上去,但是它們的下標(biāo)是沒有變的。比如十個itemView(下標(biāo)0到9)我用 notifyItemInserted 方法移除了第三個, 那么視圖中剩下的itemView的下標(biāo)就是(0,1和3到9), 這時候再去對數(shù)據(jù)集調(diào)用remove(9)的話勢必會拋出數(shù)組越界異常;

④. 因此在每次刷新后,要使用 notifyItemRangeChanged(int positionStart,int itemCount) 調(diào)整itemView的下標(biāo),使其和數(shù)據(jù)集的下標(biāo)始終是一一對應(yīng)。其中 positionStart 是第一個改變的itemView下標(biāo),itemCount指它后面下標(biāo)也需要改變的itemView個數(shù)

以上是RecyclerView的初級具體使用方法。

這篇淺談Android為RecyclerView增加監(jiān)聽以及數(shù)據(jù)混亂的小坑就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • android截圖事件監(jiān)聽的原理與實現(xiàn)

    android截圖事件監(jiān)聽的原理與實現(xiàn)

    本篇文章主要介紹了android截圖事件監(jiān)聽的原理與實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Android編程獲取sdcard音樂文件的方法

    Android編程獲取sdcard音樂文件的方法

    這篇文章主要介紹了Android編程獲取sdcard音樂文件的方法,涉及Android針對外部存儲卡中多媒體文件的相關(guān)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • Android實現(xiàn)訂單倒計時功能

    Android實現(xiàn)訂單倒計時功能

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)訂單倒計時的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android自定義View實現(xiàn)直播點贊特效

    Android自定義View實現(xiàn)直播點贊特效

    這篇文章主要為大家詳細(xì)介紹了Android自定義View實現(xiàn)直播點贊特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 使用ViewPage+Fragment仿微信界面

    使用ViewPage+Fragment仿微信界面

    這篇文章主要為大家詳細(xì)介紹了使用ViewPage+Fragment仿微信界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 深入分析Android ViewStub的應(yīng)用詳解

    深入分析Android ViewStub的應(yīng)用詳解

    本篇文章是對Android ViewStub的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Android用過TextView實現(xiàn)跑馬燈效果的示例

    Android用過TextView實現(xiàn)跑馬燈效果的示例

    本篇文章主要介紹了Android用過TextView實現(xiàn)跑馬燈效果的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 詳解Android通過修改配置文件設(shè)置wifi密碼

    詳解Android通過修改配置文件設(shè)置wifi密碼

    這篇文章主要介紹了詳解Android通過修改配置文件設(shè)置wifi密碼的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Android入門教程之Vibrator(振動器)

    Android入門教程之Vibrator(振動器)

    本節(jié)我們介紹的是Vibrator(振動器),是手機自帶的振動器,其實就是Android給我們提供的用于機身震動的一個服務(wù)!當(dāng)收到推送消息的時候我們可以設(shè)置震動提醒。
    2016-07-07
  • Android實現(xiàn)拍照截取和相冊圖片截取

    Android實現(xiàn)拍照截取和相冊圖片截取

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)拍照截取和相冊獲取圖片截取,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12

最新評論

淮滨县| 牙克石市| 天津市| 错那县| 图们市| 临沧市| 宣化县| 自贡市| 高雄市| 庆元县| 都江堰市| 镇安县| 乐山市| 南皮县| 固原市| 阿鲁科尔沁旗| 安乡县| 开远市| 邛崃市| 富宁县| 股票| 保德县| 浦县| 文化| 龙里县| 巢湖市| 翼城县| 锦屏县| 北安市| 桓台县| 乌鲁木齐县| 万年县| 长顺县| 通州市| 巴楚县| 百色市| 咸丰县| 宣化县| 福海县| 莆田市| 夏津县|