Verfassen Sie nicht, wenn Sie Fragmentbehälter ersetzenAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Verfassen Sie nicht, wenn Sie Fragmentbehälter ersetzen

Post by Anonymous »

Ich habe mit einigen Fragmenten an der FragmentContainerview -Aktivität gearbeitet. In diesem Fragment möchte ich zusammen mit XML Composeview im ersten Fragment komponieren, aber wenn ich versuche, vom zweiten Fragment zurück zu navigieren, und zurück zum ersten Fragment, wurde die Komponent von Composeview Verschwinden. FragmentContainerview Verwenden der Ersatz und ich stelle das Fragment in die Liste wie üblich ein, und ich habe keine Ahnung, was mit dieser Situation passiert. class = "Lang-kotlin hübschprint-override">

Code: Select all

import android.os.Bundle
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import androidx.core.net.toUri
import androidx.navigation.NavDeepLinkRequest
import androidx.navigation.Navigation
import androidx.navigation.findNavController
import id.derysudrajat.inlinebinding.viewBinding
import id.derysudrajat.library.R
import id.derysudrajat.library.databinding.ActivityNavigationBinding

class NavigationActivity : AppCompatActivity() {

private val binding by viewBinding(ActivityNavigationBinding::inflate)

private val listOfFragment = listOf(FragmentMainNav(), FragmentDetailNav())

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)

binding.btnHome.setOnClickListener{
replace(HOME_NAV)
}
binding.btnDetail.setOnClickListener{
replace(DETAIL_NAV)
}
Navigation.createNavigateOnClickListener(R.id.fragmentDetailNav, null)
}

private fun replace(nav: String) {
supportFragmentManager
.beginTransaction()
.replace(
binding.fragmentContainerView.id,
if (nav == HOME_NAV) listOfFragment[0] else listOfFragment[1]
)
.commit()
}

companion object {
const val HOME_NAV = "home_nav"
const val DETAIL_NAV = "detail_nav"
}
}
fragmentMaNnav.Kt

Code: Select all

import android.os.Bundle
import android.view.View
import androidx.compose.material3.Text
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.lifecycle.Lifecycle
import androidx.navigation.findNavController
import id.derysudrajat.inlinebinding.BindingFragment
import id.derysudrajat.inlinebinding.viewBinding
import id.derysudrajat.library.R
import id.derysudrajat.library.databinding.FragmentNavMainBinding

class FragmentMainNav : BindingFragment() {

override val binding by viewBinding(FragmentNavMainBinding::inflate)

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

binding.textMain.text = "Fragment Main"

binding.composeView.apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
Text(text = "This is Compose")
}
}

}
}
fragment_nav_main.xml

Code: Select all








FragmentDetailnav.Kt

Code: Select all

import android.os.Bundle
import android.view.View
import id.derysudrajat.inlinebinding.BindingFragment
import id.derysudrajat.inlinebinding.viewBinding
import id.derysudrajat.library.databinding.FragmentNavDetailBinding
import id.derysudrajat.library.databinding.FragmentNavMainBinding

class FragmentDetailNav : BindingFragment() {

override val binding by viewBinding(FragmentNavDetailBinding::inflate)

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.textDetail.text = "Detail Navigation"
}
}
fragment_nav_detail.kt

Code: Select all





Ich habe versucht, verschiedene Arten wie das Ändern von ViewCompositionStrategy zu verwenden, und es funktioniert immer noch nicht. Ich erwartete, dass Composeview immer noch angezeigt wird, wann das Fragment ersetzt wurde, und zurück, übrigens, das Komponieren, das ich ausprobiert habe, wurde aus dem Compose BOM 2022.10.00 - 2023.01.00, aber immer noch, wenn der fragment.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post