a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 系統 > Android > 正文

Android XRecyclerView最簡單的item點擊事件處理

2019-10-21 21:33:17
字體:
來源:轉載
供稿:網友

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

但是說要addHeaderView這個的話,RecyclerView沒有實現,所以我用了XRecyclerView,其實它也是在RecyclerView的基礎上再次封裝的,用起來還是蠻好的。

這里說一下,正確的使用XRecyclerView點擊item做事件處理的問題。其實就是在RecyclerView.ViewHolder里面的item做點擊,那么設計到一個問題就是如何簡單使用了。

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

簡單使用item的點擊事件

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的構造方法中也用到了super(view)。

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

item的點擊錯位問題

用XRecyclerView.getChildAt(position).setOnClickListener()出現錯位問題,如果你在addHeaderView就會出現這種錯位的問題會更加明顯,可以先來看看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); }}

當我們每次addHeaderView時他都會進行notifyDataSetChanged,而且在onCreateViewHolder也有了對應的isHeaderType判斷,所以當你想選擇第一個item做事件處理時可能就pos=0是屬于headerview。

總結

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 男人的天堂亚洲 | 成人av免费在线观看 | japan国产精选videos | 小罗莉极品一线天在线 | 亚洲国产精品一区二区三区 | 99热首页 | www国产亚洲精品久久网站 | www.色涩涩.com网站 | 精品视频在线观看一区二区 | 99精品热视频 | 国产一区久久 | 色婷婷网 | 午夜精品一区二区三区在线 | 国产精品一区不卡 | 国产精品18 | 91午夜在线 | 国产精品视频十区 | 国产精品久久久久久久久动漫 | 欧美高清在线一区 | 一区二区三区在线观看视频 | 国产欧美精品一区二区 | 自拍色图| 午夜精品美女久久久久av福利 | 国产无遮挡呻吟吸乳视频 | 欧美精品久久久久久久久久丰满 | 精品视频在线免费 | 国产裸体永久免费视频网站 | 91色在线观看 | 久久久久国产 | 亚洲第一中文字幕 | 成人中文网 | 狠狠色噜噜狠狠狠8888米奇 | 国产精品一二三四区 | 91精品国产91久久久久久久久久久久 | 免费av电影网站 | 国产福利一区二区在线 | 日韩av电影在线播放 | 久久综合九色综合欧美狠狠 | 久久精品综合 | 一区二区在线看 | 日本一区二区三区四区 |