Android - Обрабатывать конечную sh загрузку веб-просмотра из Activity? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть следующее задание:

import android.graphics.Bitmap
import android.os.Bundle
import android.provider.Settings
import android.support.v7.app.AppCompatActivity
import android.util.Log
import android.webkit.WebView
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext


class ShowOneContactHtmlActivity : AppCompatActivity() {
    private lateinit var maddress :String
    private lateinit var mcontact_name : String
    private lateinit var mavatar_to_str_base64: String
    private lateinit var dialog: MyViewDialog


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_show_html)

        val webview = findViewById<WebView>(R.id.webview)
        dialog = MyViewDialog(ShowAddressessActivity@this)
        dialog.showDialog()
        maddress = intent.getStringExtra(SENT_ADDRESS_FROM_ADDRESSES_TO_SHOWONECONTACT_ACTIVITY)
        mcontact_name = intent.getStringExtra(SENT_CONTACT_NAME_FROM_ADDRESSES_TO_SHOWONECONTACT_ACTIVITY)
        val avatar = intent.getParcelableExtra<Bitmap>(SENT_BITMAP_FROM_ADDRESSES_TO_SHOWONECONTACT_ACTIVITY)
        mavatar_to_str_base64 = bitmaptoStringBase64(avatar)
        lateinit var htmlstring :String
        GlobalScope.launch {
            htmlstring = takeHtmlStringofThisContact()
            withContext(Dispatchers.Main) {
                webview.loadDataWithBaseURL(
                    "file:///android_asset/",
                    htmlstring,
                    "text/html",
                    "UTF-8",
                    ""
                )
                dialog.hideDialog()
            }
        }


    }

    suspend private fun takeHtmlStringofThisContact():String {
        lateinit var onecntcthtmlmaker: HtmlMaker
        if (maddress == mcontact_name) {
            onecntcthtmlmaker =
                HtmlMaker(ShowOneContactHtmlActivity@ this, mavatar_to_str_base64, maddress)
        } else {
            onecntcthtmlmaker =
                HtmlMaker(
                    ShowOneContactHtmlActivity@ this,
                    mavatar_to_str_base64,
                    mcontact_name
                )
        }
        var smsparser = SmsParser(ShowOneContactHtmlActivity@ this)
        withContext(Dispatchers.Default) {
            var all_messages_of_one_contact = smsparser.loadInboxAndSentOfAddress(maddress)
            var sortedlist =
                all_messages_of_one_contact.sortedWith(compareBy({ it.m_date_in_milli }))
            for (msg in sortedlist) {
                onecntcthtmlmaker.putHtmlMessageInCurrentHtml(msg)
            }
            onecntcthtmlmaker.clearHtmlAtLast()
        }
        return onecntcthtmlmaker.current_html
    }
}

Скорее нет необходимости видеть весь код, мое внимание сосредоточено на диалоге, который отображает loading.gif. С этим кодом мой gif загрузки исчезает, когда загрузка URL все еще происходит.

Я хочу, чтобы gif загрузки исчезал, когда загрузка URL закончилась.

Как я знаю (поправьте меня, если я ошибаюсь), я должен сделать свой WebViewClient, и когда onPageFinished () выполняется, я должен уведомить Activity и диалог исчезнуть. Есть ли другой способ? Есть ли функция, которая вызывается после того, как веб-просмотр перестает загружаться, в операции, чтобы переопределить ее и установить там исчезновение диалога (т.е. загрузка gif) ???

1 Ответ

0 голосов
/ 11 апреля 2020

Вы можете использовать WebViewClient и переопределить onPageFinished:

webView.webViewClient = object : WebViewClient() {

        override fun onPageFinished(view: WebView?, url: String?) {
          // Here
        }

    }
...