Android LoaderManager LoaderCallbacks AsyncTaskLoader,kotlin,Android(2)

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, "未知")
        }
    }
}

android ,LoaderManager.LoaderCallbacks与AsyncTaskLoader, Java(2)_zhangphil的博客-CSDN博客android LoaderManager与AsyncTaskLoader,java(1)_zhangphil的博客-CSDN博客。android LoaderManager与AsyncTaskLoader,java(1)https://blog.csdn.net/zhangphil/article/details/129625669

猜你喜欢

转载自blog.csdn.net/zhangphil/article/details/130125829