Кнопка включена, когда отображается конкретный фрагмент (Kotlin) - PullRequest
0 голосов
/ 23 мая 2018

Я новичок в Android и в настоящее время я работаю над Activity, которая динамически отображает фрагменты в FrameLayout (см. Код ниже).Я хотел бы включить кнопку (содержится в MainActivity) при отображении определенного фрагмента.

Я обнаружил, что было бы здорово сделать это просто внутри жизненного цикла фрагмента onPause / onResume, но это не сработало (приложениеавария).Это логкат:

05-25 09:15:27.315 4964-4964/com.example.j1oden.exkotlin E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.j1oden.exkotlin, PID: 4964
java.lang.IllegalStateException: btnPrev must not be null

Теперь я пытаюсь использовать «фрагментManager.findFragmentByTag», но всегда возвращает true, если мой фрагмент всегда загружен (я что-то здесь упускаю).

ЗдесьВы можете увидеть, как мне удается загружать фрагменты в мой FrameLayout:

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

    // Init Buttons OnClickListener
    btnFrag.setOnClickListener { onClick(btnFrag) }
    btnPrev.setOnClickListener { onClick(btnPrev) }
    btnNext.setOnClickListener { onClick(btnNext) }
    btnWeb.setOnClickListener { onClick(btnWeb) }

    Log.d("oncreate", "MA_oncreate")
    }

@Suppress("CAST_NEVER_SUCCEEDS")
// OnClick Buttons Fragments Redirection Links
fun onClick(v: View?) {
    when (v?.id) {
        R.id.btnFrag -> {if (isFrag1Loaded) showFrag2() else showFrag1()}
        R.id.btnPrev -> {if (FragW.webview.canGoBack()) webview.goBack()
        else Toast.makeText(baseContext, "No History Available", Toast.LENGTH_SHORT).show()}
        R.id.btnNext -> {if (FragW.webview.canGoForward()) webview.goForward()
        else Toast.makeText(baseContext, "No History Available", Toast.LENGTH_SHORT).show()}
        R.id.btnWeb -> {  showFragW() }
        }
    //isBtnEnabled = fragmentManager.findFragmentByTag("tagFragW") != null && fragmentManager.findFragmentByTag("tagFragW").isVisible
}

// Show Fragment 1 function
private fun showFrag1() {
    val transaction = manager.beginTransaction()
    transaction.replace(R.id.frag_container, Frag1(), "tagFrag1")
    transaction.commit()
    transaction.addToBackStack("tagFrag1")
    isFrag1Loaded = true
}

// Show Fragment2 function
private fun showFrag2() {
    val transaction = manager.beginTransaction()
    transaction.replace(R.id.frag_container, Frag2(), "tagFrag2")
    transaction.commit()
    transaction.addToBackStack("tagFrag2")
    isFrag1Loaded = false
}

// Show FragmentW function
private fun showFragW() {
    val transaction = manager.beginTransaction()
    transaction.replace(R.id.frag_container, FragW(), "tagFragW")
    transaction.addToBackStack(null)
    transaction.addToBackStack("tagFragW")
    transaction.commit()
}

// WebView Custom Class
open class mWebViewClient : WebViewClient() {
    override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
        view?.loadUrl(request?.url.toString())
        return true
    }

    override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
        view?.loadUrl(url)
        return true
    }
}

Спасибо за вашу помощь!

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