Я новичок в 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
}
}
Спасибо за вашу помощь!