前言
本篇一起來學習RxBinding中的RxAdapterView,J大神將Android中AdapterView(ListView、GridView等)的一些事件及動作加以RxJava的觀察者模式並封裝了起來就形成了RxAdapterView,使用起來相當便捷。
本篇以ListView為例子。
佈局
主佈局中就需要一個ListView即可。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.leiholmes.rxbindingdemo.ui.RxAdapterViewActivity">
<ListView
android:id="@+id/lv_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>複製程式碼
Activity
View注入
使用ButterKnife獲取ListView例項。
@BindView(R.id.lv_list)
ListView lvList;複製程式碼
初始化假資料與介面卡
//假資料
list = new ArrayList<>();
for (int i = 0; i < 100; i++) {
list.add("LeiHolmes:" + i);
}
//adapter介面卡
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
adapter.addAll(list);
lvList.setAdapter(adapter);複製程式碼
itemClicks條目點選事件
RxAdapterView.itemClicks(AdapterView view)
,內部封裝了OnItemClickListener條目點選監聽。
addDisposable(RxAdapterView.itemClicks(lvList)
.throttleFirst(2, TimeUnit.SECONDS)
.subscribe(integer -> Toast.makeText(RxAdapterViewActivity.this,
"點選了第" + integer + "條:" + list.get(integer), Toast.LENGTH_SHORT).show()));複製程式碼
需要詳細點選資訊可使用RxAdapterView.itemClickEvents(AdapterView view)
,它返回的型別是AdapterViewItemClickEvent,內部包含clickedView、position、id等資訊。
itemLongClicks條目長按事件
RxAdapterView.itemLongClicks(AdapterView view)
,內部封裝了OnItemLongClickListener條目長按監聽。
addDisposable(RxAdapterView.itemLongClicks(lvList)
.throttleFirst(2, TimeUnit.SECONDS)
.subscribe(integer -> Toast.makeText(RxAdapterViewActivity.this,
"長按了第" + integer + "條:" + list.get(integer), Toast.LENGTH_SHORT).show()));複製程式碼
需要詳細長按資訊可使用RxAdapterView.itemLongClickEvents(AdapterView view)
,它返回的型別是AdapterViewItemLongClickEvent,內部包含clickedView、position、id等資訊。
itemSelections條目選中事件
RxAdapterView.itemSelections(AdapterView view)
,內部封裝了OnItemSelectedListener條目選中監聽。當ItemView中有選中效果View時起作用。
addDisposable(RxAdapterView.itemSelections(lvList)
.subscribe(integer -> Log.e("rx_binding_test", "itemSelections:" + integer)));複製程式碼
需要詳細選中資訊可使用RxAdapterView.selectionEvents(AdapterView view)
,它返回的型別是AdapterViewSelectionEvent。
View操作
RxAdapterView中也封裝了AdapterView中例如setSelection()
等常用的操作,使用方式如下:
addDisposable(RxAdapterView.itemClicks(lvList)
.throttleFirst(2, TimeUnit.SECONDS)
.subscribe(integer -> RxAdapterView.selection(lvList).accept(0)));複製程式碼
本文疑問
addDisposable()方法什麼鬼?
飛機到本系列第一篇有講解:
RxBinding系列之RxView(一)
Lambda表示式什麼鬼?
飛機到我寫的Lambda表示式教程:
Lambda表示式基本語法與應用
總結
到本篇為止,RxBingding中常用的View就介紹完畢了。RxBingding中還有很多內容未介紹,感興趣的碼友可去J大神的GitHub中系統的學習一下。
JakeWharton/RxBinding
進階中的碼猿一枚,寫的不對的地方歡迎大神們留言指正,有什麼疑惑或者建議也可以在我Github上RxBindingDemo專案Issues中提出,我會及時回覆。
附上Demo的地址:
RxBindingDemo
另外:歡迎光臨我的Hexo個人部落格:Lei’s Blog