1+ package com.morihacky.android.rxjava.fragments
2+
3+ import android.content.Context
4+ import android.os.Bundle
5+ import android.os.Handler
6+ import android.os.Looper
7+ import android.view.LayoutInflater
8+ import android.view.View
9+ import android.view.ViewGroup
10+ import android.widget.ArrayAdapter
11+ import android.widget.ListView
12+ import butterknife.ButterKnife
13+ import com.morihacky.android.rxjava.R
14+
15+ class PlaygroundFragment : BaseFragment () {
16+
17+ private var _logsList : ListView ? = null
18+ private var _adapter : LogAdapter ? = null
19+
20+ private var _attempt = 0
21+ private var _logs : MutableList <String > = ArrayList ()
22+
23+ override fun onDestroy () {
24+ super .onDestroy()
25+ ButterKnife .unbind(this )
26+ }
27+
28+ override fun onCreateView (inflater : LayoutInflater ? ,
29+ container : ViewGroup ? ,
30+ savedInstanceState : Bundle ? ): View ? {
31+ return inflater!! .inflate(R .layout.fragment_concurrency_schedulers, container, false )
32+ }
33+
34+ override fun onActivityCreated (savedInstanceState : Bundle ? ) {
35+ super .onActivityCreated(savedInstanceState)
36+
37+ _logsList = activity.findViewById(R .id.list_threading_log) as ListView
38+
39+ activity.findViewById(R .id.btn_start_operation).setOnClickListener { _ ->
40+ _log (" Button clicked" )
41+ }
42+
43+ _setupLogger ()
44+ }
45+
46+ // -----------------------------------------------------------------------------------
47+ // Method that help wiring up the example (irrelevant to RxJava)
48+
49+ private fun _log (logMsg : String ) {
50+
51+ if (_isCurrentlyOnMainThread ()) {
52+ _logs .add(0 , logMsg + " (main thread) " )
53+ _adapter !! .clear()
54+ _adapter !! .addAll(_logs )
55+ } else {
56+ _logs .add(0 , logMsg + " (NOT main thread) " )
57+
58+ // You can only do below stuff on main thread.
59+ Handler (Looper .getMainLooper()).post {
60+ _adapter !! .clear()
61+ _adapter !! .addAll(_logs )
62+ }
63+ }
64+ }
65+
66+ private fun _setupLogger () {
67+ _logs = ArrayList <String >()
68+ _adapter = LogAdapter (activity, ArrayList <String >())
69+ _logsList !! .adapter = _adapter
70+ }
71+
72+ private fun _isCurrentlyOnMainThread (): Boolean {
73+ return Looper .myLooper() == Looper .getMainLooper()
74+ }
75+
76+ private inner class LogAdapter (context : Context , logs : List <String >) : ArrayAdapter<String>(context, R .layout.item_log, R .id.item_log, logs)
77+ }
0 commit comments