Android LoaderManager LoaderCallbacks AsyncTaskLoader,kotlin,Android(2)
package com.example.myapplication
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.SystemClock
import android.util.Log
import android.view.View
import android.view.View.OnClickListener
import android.widget.Button
import androidx.loader.app.LoaderManager
import androidx.loader.content.AsyncTaskLoader
import androidx.loader.content.Loader
class MainActivity : AppCompatActivity(), OnClickListener {
companion object {
private val TAG = "fly"
}
private var loadId = 2023
private var loaderManager: LoaderManager? = null
private var startBtn: Button? = null
private var stopBtn: Button? = null
private var cancelBtn: Button? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
loaderManager = LoaderManager.getInstance(this)
loaderManager?.initLoader(loadId, Bundle(), callback)
startBtn = registerButton(R.id.start)
stopBtn = registerButton(R.id.stop)
cancelBtn = registerButton(R.id.cancel)
}
private fun registerButton(id: Int): Button {
var button: Button = findViewById(id)
button.setOnClickListener(this)
return button
}
val callback = object : LoaderManager.LoaderCallbacks<String> {
override fun onCreateLoader(id: Int, args: Bundle?): MyLoader {
return MyLoader(applicationContext)
}
override fun onLoaderReset(loader: Loader<String>) {
}
override fun onLoadFinished(loader: Loader<String>, data: String?) {
Log.d(TAG, "onLoadFinished")
}
}
class MyLoader(context: Context) : AsyncTaskLoader<String>(context) {
override fun onStartLoading() {
Log.d(TAG, "---")
Log.d(TAG, "onStartLoading")
forceLoad()
}
override fun onCanceled(data: String?) {
Log.d(TAG, "onCanceled $data")
}
override fun cancelLoadInBackground() {
Log.d(TAG, "cancelLoadInBackground")
}
override fun loadInBackground(): String {
var s = ""
s = s.let {
"fly"
}
SystemClock.sleep(6000)
Log.d(TAG, "loadInBackground $s")
return s
}
override fun deliverResult(data: String?) {
Log.d(TAG, "deliverResult $data")
}
override fun onStopLoading() {
Log.d(TAG, "onStopLoading")
}
}
override fun onClick(v: View?) {
when (v) {
startBtn -> loaderManager?.getLoader<MyLoader>(loadId)?.startLoading()
stopBtn -> loaderManager?.getLoader<MyLoader>(loadId)?.stopLoading()
cancelBtn -> loaderManager?.getLoader<MyLoader>(loadId)?.cancelLoad()
else -> Log.d(TAG, "未知")
}
}
}