Android-处理从活动中加载Webview的完成?

问题描述 投票:0回答:1

我有以下活动:

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的对话框。使用此代码,当仍然进行URL加载时,我的加载gif消失。

我希望URL的加载完成后,加载的gif消失。

据我所知(如果我做错了,请纠正我),我必须制作我的WebViewClient,并且在执行onPageFinished()时,我必须通知Activity,并且对话框消失。还有另一种方法吗?在webview停止加载后,是否有一个函数在活动中被调用以覆盖它并在其中设置对话框的消失(即,加载gif)???

android kotlin android-activity android-webview webviewclient
1个回答
0
投票
您可以使用WebViewClient并覆盖onPageFinished:

webView.webViewClient = object : WebViewClient() { override fun onPageFinished(view: WebView?, url: String?) { // Here } }

© www.soinside.com 2019 - 2024. All rights reserved.