RxAndroid에서 SwipeRefreshLayout 사용
RxSwipeRefreshLayout
RxSwipeRefreshLayout
라는 Binding 클래스를 제공합니다.// refreshingはRefreshLayoutのプログレスを切り替えることができるAction1を返す
val refreshLayoutRefreshing = RxSwipeRefreshLayout.refreshing(refreshLayout)
// refreshesはProgress状態になったら配信されるObservable<void>を返す
val refreshLayoutStream = RxSwipeRefreshLayout.refreshes(refreshLayout)
해보다
배치에 빠른 새로 고침 배치 추가
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/list_event"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v4.widget.SwipeRefreshLayout>
활동으로 구현
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_item, container, false)
// ListViewにAdaptorとリスナをセット
mListView = view.findViewById(R.id.list_event) as AbsListView
mListView?.adapter = mAdapter
mListView?.onItemClickListener = this
// Observerを作成
val observer = Observers.create<AtndApi.Companion.Entity>(
{ t ->
// onNext
mAdapter?.add(t.title)
mAdapter?.notifyDataSetChanged()
},
{ e ->
// onError
println("Error!! ${e.message}")
},
{
// onComplete
mAdapter?.notifyDataSetChanged()
})
// Observableを作成
// 配信時は新しいスレッド
// 監視者はメインスレッド
val observable = AtndApi.request(mWordForSearch, 1)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
val refreshLayout = view.findViewById(R.id.refresh) as SwipeRefreshLayout
// ローディング中のプログレスの色を設定
refreshLayout.setColorSchemeColors(Color.RED, Color.GREEN, Color.BLUE)
refreshLayout.setProgressBackgroundColorSchemeColor(Color.LTGRAY)
val refreshLayoutRefreshing = RxSwipeRefreshLayout.refreshing(refreshLayout)
val refreshLayoutStream = RxSwipeRefreshLayout.refreshes(refreshLayout)
// 購読を開始
// 初回のAPIコール
mSubscriptions.add(observable.subscribe(observer))
// RefreshLayoutを監視
mSubscriptions.add(refreshLayoutStream.subscribe({
// ローディングが始まったらAPIコール
val subscription = AtndApi.request(mWordForSearch, mAdapter?.count!! + 1)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.finallyDo({
// 読み込みが終わったらRefreshLayoutのローディング状態を解除
refreshLayoutRefreshing.call(false)
})
.subscribe(observer)
mSubscriptions.add(subscription)
}))
return view
}
override fun onDestroyView() {
super.onDestroyView()
// 購読を解除する
mSubscriptions.unsubscribe()
}
Reference
이 문제에 관하여(RxAndroid에서 SwipeRefreshLayout 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rei-m/items/a69bdc7bf09b796817d7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)