Android XRecyclerView最簡單的item點擊事件處理
以前一直都是用PullToRefresh,后來覺得還是太out了?,F(xiàn)在很多人都是用RecyclerView,很簡單的用法,布局多樣化,主要是有瀑布流。這才知道RecyclerView.LayoutManager真正的強大。
但是說要addHeaderView這個的話,RecyclerView沒有實現(xiàn),所以我用了XRecyclerView,其實它也是在RecyclerView的基礎上再次封裝的,用起來還是蠻好的。
這里說一下,正確的使用XRecyclerView點擊item做事件處理的問題。其實就是在RecyclerView.ViewHolder里面的item做點擊,那么設計到一個問題就是如何簡單使用了。
一般我們會直接在item布局中的最外層設置一個id=”@+id/…”,然后在onBindViewHolder中用holder.**.setOnClickListener()進行事件處理,你看看你是不是這樣做的,如果這樣做的話,那就繼續(xù)往下看,教你簡單的。
簡單使用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的布局,這樣的話,我們要實現(xiàn)點擊事件就很容易了,可以直接在用holder.itemView.setOnClickListener
item的點擊錯位問題
用XRecyclerView.getChildAt(position).setOnClickListener()出現(xiàn)錯位問題,如果你在addHeaderView就會出現(xiàn)這種錯位的問題會更加明顯,可以先來看看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()
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Android基于Mapbox?V10?繪制LineGradient軌跡
這篇文章主要介紹了Android基于Mapbox?V10?繪制LineGradient軌跡,文章通告介紹一些V10上的用法,最終講下如何繪制漸變運動記錄軌跡,感興趣的小伙伴可以參考一下2022-08-08Android實現(xiàn)雙擊TitleBar回頂部的功能示例代碼
一個簡單易用的導航欄TitleBar,可以輕松實現(xiàn)IOS導航欄的各種效果,下面這篇文章主要給大家介紹了關于Android如何實現(xiàn)雙擊TitleBar回頂部功能的相關資料,文中給出了詳細的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。2017-09-09Android編程開發(fā)之EditText中inputType屬性小結
這篇文章主要介紹了Android編程開發(fā)之EditText中inputType屬性用法,分析說明了Android中EditText的inputType屬性具體含義與使用技巧,需要的朋友可以參考下2016-01-01Android 滑動小圓點ViewPager的兩種設置方法詳解流程
Viewpager,視圖翻頁工具,提供了多頁面切換的效果。Android 3.0后引入的一個UI控件,位于v4包中。低版本使用需要導入v4包,現(xiàn)在我們一般不再兼容3.0及以下版本,另外使用Android studio開發(fā),默認導入v7包,v7包含了v4,所以不用導包,越來越方便了2021-11-11Android 自動補全提示輸入AutoCompleteTextView、 MultiAutoCompleteTextV
本文主要介紹了Android自動補全提示輸入AutoCompleteTextView、 MultiAutoCompleteTextView,具有一定的參考作用,下面跟著小編一起來看下吧2017-01-01LayoutAnimation給ListView中的item設置動態(tài)出場效果(實例)
下面小編就為大家?guī)硪黄狶ayoutAnimation給ListView中的item設置動態(tài)出場效果(實例)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10Android開發(fā)MQTT協(xié)議的模型及通信淺析
這篇文章主要W為大家介紹了Android開發(fā)MQTT協(xié)議的模型及通信淺析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03