Отключить снек-бар, когда сеть подключена - PullRequest
0 голосов
/ 08 ноября 2019

Не понимаю, почему snackbar в else не работает правильно и не отклоняет мои snackbar?

private fun showNetworkMessage(isConnected: Boolean) {
    val snackbar = Snackbar.make(
        findViewById(R.id.coordinatorLayout),
        this.getText(R.string.warning_no_internet_connection), Snackbar.LENGTH_INDEFINITE
    )
    val snackBarLayout = snackbar.view as Snackbar.SnackbarLayout
    for (i in 0 until snackBarLayout.childCount) {
        val parent = snackBarLayout.getChildAt(i)
        if (parent is LinearLayout) {
            parent.rotation = 180f
            break
        }
    }
    snackbar.view.setOnTouchListener { _, _ ->
        snackbar.dismiss()
        true
    }
    if (!isConnected) {
        snackbar.show()
    } else {
        snackbar.dismiss()
    }
}

Ответы [ 3 ]

1 голос
/ 08 ноября 2019

Объявить глобальную переменную,

 var snackbar: Snackbar? = null

Изменения в функции,

  private fun showNetworkMessage(isConnected: Boolean) {
        if (snackbar == null) {
            snackbar= Snackbar.make(
                    findViewById(R.id.coordinatorLayout),
                    this.getText(R.string.warning_no_internet_connection), Snackbar.LENGTH_INDEFINITE
            )    
        }
1 голос
/ 08 ноября 2019

Сохранить snackbar global:

var snackbar: Snackbar? = null

private fun showNetworkMessage() {
   snackbar = Snackbar.make(
        findViewById(R.id.coordinatorLayout),
        this.getText(R.string.warning_no_internet_connection), Snackbar.LENGTH_INDEFINITE
    )
    val snackBarLayout = snackbar.view as Snackbar.SnackbarLayout
    for (i in 0 until snackBarLayout.childCount) {
        val parent = snackBarLayout.getChildAt(i)
        if (parent is LinearLayout) {
            parent.rotation = 180f
            break
        }
    }
    snackbar.view.setOnTouchListener { _, _ ->
        snackbar.dismiss()
        true
    }
    snackbar.show()
}

private fun dismissNetworkMessage() {
    snackbar?.dismiss()
}

private fun showNetworkMessage(isConnected: Boolean) {
    if (!isConnected) {
        showNetworkMessage()
    } else {
        dismissNetworkMessage()
    }
}
1 голос
/ 08 ноября 2019

Попробуйте переместить объявление Snackbar из функции и попробуйте снова.

...