Как вызвать эту функцию из других действий? - PullRequest
0 голосов
/ 25 декабря 2018

мне нужна помощь в этом коде котла, пожалуйста ... у меня есть функция checkConnctivvity (), и она работает отлично ...

fun checkConnectivity(){

    val cm=getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val activeNetwork =cm.activeNetworkInfo
    val isConnected=activeNetwork != null && activeNetwork.isConnectedOrConnecting}

1 / я пробовал разные способы вызова из других действий, но яне могу ... Как ее решить плз

2 / я хочу добавить функцию checkConnectivity () в webChromeClient, поэтому каждый раз, когда progressBarChanged будет проверять соединение ... но не сработало

class ExodyaActivity : AppCompatActivity() {

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

    //Problem1: failed to call the checkConnectivity() from MainActivity

    val myWebview   = ExoWeb
    var ProgressBar = progressBar
    var FrameLayout = frameLayout
    var TextView  = loadPrs

    myWebview.visibility = View.GONE
    frameLayout.visibility = View.GONE
    loadLinear.visibility = View.GONE

    //webview
    myWebview.webViewClient= WebViewClient()
    myWebview.settings.javaScriptEnabled=true
    myWebview.loadUrl("url")

    ProgressBar.max = 100

    myWebview.webChromeClient = object : WebChromeClient() {
        override fun onProgressChanged(view: WebView, progress: Int) {

            // Problem2: checkConnectivity()  didn't work here !!!!

            progressBar.progress = progress
            if(progress < 90) {
                loadPrs.text = " %" + progress
                myWebview.visibility = View.GONE
                frameLayout.visibility = View.VISIBLE
                loadLinear.visibility = View.VISIBLE
            }
            if (progress == 100) {

                FrameLayout.visibility = View.GONE
                loadLinear.visibility = View.GONE
                myWebview.visibility = View.VISIBLE
            }
        }
    }

}
// onBackPressed (back in webview history)
 override fun onBackPressed() {
     var myWebview   = ExoWeb
    if (myWebview.canGoBack()) {
        myWebview.goBack()
    } else {
         super.onBackPressed()
            Toast.makeText(this,"See You Next Time!",Toast.LENGTH_SHORT).show()
             }
        }

}

Заранее спасибо:)

1 Ответ

0 голосов
/ 25 декабря 2018
  1. Создать файл Kotlin, например, с именем Utils;
  2. Переместить функцию в этот файл и добавить параметр Context:

    fun checkConnectivity(ctx: Context): Boolean {
        val cm = ctx.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val activeNetwork =cm.activeNetworkInfo
        return activeNetwork != null && activeNetwork.isConnectedOrConnecting
    } 
    

    Если вы собираетесь использовать его только в Activity, вы можете создать функцию расширения без Context параметр:

    fun Activity.checkConnectivity(): Boolean {
        val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val activeNetwork =cm.activeNetworkInfo
        return activeNetwork != null && activeNetwork.isConnectedOrConnecting
    }
    
  3. Вызывайте эту функцию откуда угодно.Если вы вызываете его из Activity, просто используйте код:

    checkConnectivity(this@YourActivity)
    

    Если вы создали функцию расширения, просто вызовите ее в Activity без передачи каких-либо параметров:

    checkConnectivity()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...