1+ package moe.feng.kotlinyan
2+
3+ import android.app.Fragment
4+ import android.os.Bundle
5+ import android.support.v4.widget.SwipeRefreshLayout
6+ import android.support.v7.widget.RecyclerView
7+ import android.view.LayoutInflater
8+ import android.view.View
9+ import android.view.ViewGroup
10+ import android.widget.TextView
11+ import moe.feng.kotlinyan.common.AndroidExtensions
12+ import moe.feng.kotlinyan.common.RecyclerViewExtensions
13+ import moe.feng.kotlinyan.common.ViewExtensions
14+ import org.jetbrains.anko.doAsync
15+ import org.jetbrains.anko.fragmentUiThread
16+ import org.jetbrains.anko.support.v4.onRefresh
17+
18+ class RecyclerViewExtDemoFragment : Fragment (), RecyclerViewExtensions, AndroidExtensions {
19+
20+ lateinit var refreshLayout : SwipeRefreshLayout
21+ lateinit var recyclerView : RecyclerView
22+
23+ private val adapter = SimpleAdapter (20 )
24+
25+ override fun onCreateView (inflater : LayoutInflater , container : ViewGroup , savedInstanceState : Bundle ? ): View
26+ = inflater.inflate(R .layout.fragment_recyclerview_ext, container, false )
27+
28+ override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
29+ refreshLayout = view[R .id.refresh_layout] as SwipeRefreshLayout
30+ recyclerView = view[R .id.recycler_view] as RecyclerView
31+
32+ refreshLayout.setColorSchemeColors(resources.color[R .color.colorAccent])
33+ refreshLayout.onRefresh {
34+ doAsync {
35+ Thread .sleep(1000 )
36+ adapter.count = 15
37+ fragmentUiThread {
38+ adapter.notifyDataSetChanged()
39+ refreshLayout.isRefreshing = false
40+ }
41+ }
42+ }
43+ recyclerView.adapter = adapter
44+
45+ // Load more callback
46+ recyclerView.onLoadMore {
47+ if (refreshLayout.isRefreshing) return @onLoadMore
48+ refreshLayout.isRefreshing = true
49+ doAsync {
50+ Thread .sleep(1000 )
51+ adapter.count + = 20
52+ fragmentUiThread {
53+ adapter.notifyDataSetChanged()
54+ refreshLayout.isRefreshing = false
55+ }
56+ }
57+ }
58+ }
59+
60+ private class SimpleAdapter (var count : Int ) : RecyclerView.Adapter<SimpleAdapter.ViewHolder>(), AndroidExtensions {
61+
62+ override fun onBindViewHolder (holder : ViewHolder ? , position : Int ) {
63+ holder?.textView?.text = " Item %d" .format(position)
64+ }
65+
66+ override fun getItemCount () = count
67+
68+ override fun onCreateViewHolder (parent : ViewGroup , viewType : Int )
69+ = ViewHolder (parent.inflateView(R .layout.simple_list_item_1))
70+
71+ class ViewHolder (itemView : View ) : RecyclerView.ViewHolder(itemView), ViewExtensions {
72+
73+ val textView by lazy { itemView[R .id.text] as TextView }
74+
75+ }
76+
77+ }
78+
79+ }
0 commit comments