RxBinding系列之RxAdapterView(四)

LeiHolmes發表於2017-11-14

前言

  本篇一起來學習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

相關文章