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

Android XRecyclerView最簡(jiǎn)單的item點(diǎn)擊事件處理

 更新時(shí)間:2022年08月28日 09:50:07   作者:騷劍客  
這篇文章主要為大家詳細(xì)介紹了Android XRecyclerView最簡(jiǎn)單的item點(diǎn)擊事件處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

以前一直都是用PullToRefresh,后來覺得還是太out了。現(xiàn)在很多人都是用RecyclerView,很簡(jiǎn)單的用法,布局多樣化,主要是有瀑布流。這才知道RecyclerView.LayoutManager真正的強(qiáng)大。

但是說要addHeaderView這個(gè)的話,RecyclerView沒有實(shí)現(xiàn),所以我用了XRecyclerView,其實(shí)它也是在RecyclerView的基礎(chǔ)上再次封裝的,用起來還是蠻好的。

這里說一下,正確的使用XRecyclerView點(diǎn)擊item做事件處理的問題。其實(shí)就是在RecyclerView.ViewHolder里面的item做點(diǎn)擊,那么設(shè)計(jì)到一個(gè)問題就是如何簡(jiǎn)單使用了。

一般我們會(huì)直接在item布局中的最外層設(shè)置一個(gè)id=”@+id/…”,然后在onBindViewHolder中用holder.**.setOnClickListener()進(jìn)行事件處理,你看看你是不是這樣做的,如果這樣做的話,那就繼續(xù)往下看,教你簡(jiǎn)單的。

簡(jiǎn)單使用item的點(diǎn)擊事件

1、先看下RecyclerView.ViewHolder源碼是怎么寫的

/**
 * A ViewHolder describes an item view and metadata about its place within the RecyclerView.
 *
 * <p>{@link Adapter} implementations should subclass ViewHolder and add fields for caching
 * potentially expensive {@link View#findViewById(int)} results.</p>
 *
 * <p>While {@link LayoutParams} belong to the {@link LayoutManager},
 * {@link ViewHolder ViewHolders} belong to the adapter. Adapters should feel free to use
 * their own custom ViewHolder implementations to store data that makes binding view contents
 * easier. Implementations should assume that individual item views will hold strong references
 * to <code>ViewHolder</code> objects and that <code>RecyclerView</code> instances may hold
 * strong references to extra off-screen item views for caching purposes</p>
 */
public static abstract class ViewHolder {
 public final View itemView;

 .......

 public ViewHolder(View itemView) {
  if (itemView == null) {
   throw new IllegalArgumentException("itemView may not be null");
  }
  this.itemView = itemView;
 }

 .......
}

2、再來看看我們繼承它做了什么事情

public class XRViewHolder extends RecyclerView.ViewHolder {
 public XRViewHolder(View view) {
  super(view);
  ButterKnife.bind(this, view);
 }
 .......
 public void onBindViewHolder(VH holder, final int position) {
  if (position >= 0) {
   holder.itemView.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
     itemClick(getItem(position), position);
    }
   });
  }
 }
}

看到我們自定義的XRViewHolder的構(gòu)造方法中也用到了super(view)。

其實(shí)這里的view就是item的布局,這樣的話,我們要實(shí)現(xiàn)點(diǎn)擊事件就很容易了,可以直接在用holder.itemView.setOnClickListener

item的點(diǎn)擊錯(cuò)位問題

用XRecyclerView.getChildAt(position).setOnClickListener()出現(xiàn)錯(cuò)位問題,如果你在addHeaderView就會(huì)出現(xiàn)這種錯(cuò)位的問題會(huì)更加明顯,可以先來看看XRecyclerView里面的部分源碼。

public class XRecyclerView extends RecyclerView {

 private WrapAdapter mWrapAdapter;
 ......

 public void addHeaderView(View view) {
 sHeaderTypes.add(HEADER_INIT_INDEX + mHeaderViews.size());
 mHeaderViews.add(view);
 if (mWrapAdapter != null) {
  mWrapAdapter.notifyDataSetChanged();
 }
 }

 ......
 private class WrapAdapter extends RecyclerView.Adapter<ViewHolder> {

 @Override
 public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  if (viewType == TYPE_REFRESH_HEADER) {
   return new SimpleViewHolder(mRefreshHeader);
  } else if (isHeaderType(viewType)) {
   return new SimpleViewHolder(getHeaderViewByType(viewType));
  } else if (viewType == TYPE_FOOTER) {
   return new SimpleViewHolder(mFootView);
  }
  return adapter.onCreateViewHolder(parent, viewType);
 }
}

當(dāng)我們每次addHeaderView時(shí)他都會(huì)進(jìn)行notifyDataSetChanged,而且在onCreateViewHolder也有了對(duì)應(yīng)的isHeaderType判斷,所以當(dāng)你想選擇第一個(gè)item做事件處理時(shí)可能就pos=0是屬于headerview。

總結(jié)

item點(diǎn)擊事件簡(jiǎn)單方便快捷的方式:holder.itemView.setOnClickListener()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android仿美團(tuán)下拉菜單(商品選購(gòu))實(shí)例代碼

    Android仿美團(tuán)下拉菜單(商品選購(gòu))實(shí)例代碼

    這篇文章主要介紹了Android仿美團(tuán)下拉菜單(商品選購(gòu))實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • Android RecyclerView實(shí)現(xiàn)點(diǎn)擊條目刪除

    Android RecyclerView實(shí)現(xiàn)點(diǎn)擊條目刪除

    這篇文章主要為大家詳細(xì)介紹了Android RecyclerView實(shí)現(xiàn)點(diǎn)擊條目刪除,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Android 應(yīng)用的安裝過程詳解

    Android 應(yīng)用的安裝過程詳解

    這篇文章主要介紹了Android 應(yīng)用的安裝過程詳解的相關(guān)資料,對(duì)應(yīng)Android應(yīng)用的安裝,我想大家應(yīng)該了解下的,需要的朋友可以參考下
    2016-11-11
  • 深入理解Android中的建造者模式

    深入理解Android中的建造者模式

    建造者模式將一個(gè)復(fù)雜的構(gòu)建與其表示相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。所以這篇文章主要介紹了Android中的建造者模式,有需要的朋友們可以參考借鑒。
    2016-09-09
  • 基于android實(shí)現(xiàn)五子棋開發(fā)

    基于android實(shí)現(xiàn)五子棋開發(fā)

    這篇文章主要為大家詳細(xì)介紹了基于android實(shí)現(xiàn)五子棋開發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Android ViewPager實(shí)現(xiàn)Banner循環(huán)播放

    Android ViewPager實(shí)現(xiàn)Banner循環(huán)播放

    這篇文章主要為大家詳細(xì)介紹了Android ViewPager實(shí)現(xiàn)Banner循環(huán)播放,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android開發(fā)之自定義CheckBox

    Android開發(fā)之自定義CheckBox

    本文通過實(shí)例代碼演示如何在Android中如何自定義CheckBox,實(shí)現(xiàn)的效果很好,有需要的可以參考借鑒。
    2016-08-08
  • Kotlin基礎(chǔ)學(xué)習(xí)之lambda中return語句詳解

    Kotlin基礎(chǔ)學(xué)習(xí)之lambda中return語句詳解

    這篇文章主要給大家介紹了關(guān)于Kotlin基礎(chǔ)學(xué)習(xí)之lambda中return語句的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或使用Kotlin具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • Android定時(shí)器Timer的停止和重啟實(shí)現(xiàn)代碼

    Android定時(shí)器Timer的停止和重啟實(shí)現(xiàn)代碼

    本篇文章主要介紹了Android實(shí)現(xiàn)定時(shí)器Timer的停止和重啟實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Android Studio 3.6 正式版終于發(fā)布了,快來圍觀

    Android Studio 3.6 正式版終于發(fā)布了,快來圍觀

    Android Studio 3.6 正式版終于發(fā)布了,值得興奮呀,畢竟 3.5 大版本更新也已經(jīng)差不多半年了,撒花撒花!這次更新又更新了什么呢?快來跟隨小編一起看看吧
    2020-02-02

最新評(píng)論

囊谦县| 成都市| 绵竹市| 鲁山县| 南木林县| 荔浦县| 武威市| 金湖县| 西充县| 石柱| 板桥市| 湖南省| 瑞丽市| 双峰县| 青岛市| 普定县| 东明县| 收藏| 惠安县| 宝清县| 新宾| 丰顺县| 余干县| 石柱| 临沂市| 娱乐| 弥渡县| 台南市| 汕尾市| 监利县| 徐闻县| 罗江县| 无棣县| 沙洋县| 缙云县| 陵水| 滦平县| 鄂托克旗| 敦化市| 道孚县| 米易县|