我正在将应用导航迁移到导航组件。一切都很好,非常直观,但我有这个问题。在我的主活动中,我首先添加homeFragment,它工作得很好。但当我尝试在homeFragment上添加一些新片段时,我的第二个片段是透明的。我的元素是可见的。但是背景不是。2所以我看到HomeScreen片段,在它上面是我的第二个片段的元素。3这是我的代码:
<fragment
android:id="@+id/mainContainer"
android:layout_width="0dp"
android:layout_height="0dp"
android:elevation="5dp"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph"
android:name="androidx.navigation.fragment.NavHostFragment"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar" />
<!-- <FrameLayout-->
<!-- android:id="@+id/mainContainer"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="0dp"-->
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
<!-- app:layout_constraintLeft_toLeftOf="parent"-->
<!-- app:layout_constraintRight_toRightOf="parent"-->
<!-- app:layout_constraintTop_toBottomOf="@id/toolbar" />-->
(之前使用frameLayout,一切都很好,现在使用fragment就不行了)
class NavigationMainComponent : CoroutineScope{
var job = Job()
override val coroutineContext: CoroutineContext
get() = job + Dispatchers.IO
private val _navigation = MutableSharedFlow<NavigationState>()
val navigationState: Flow<NavigationState> = _navigation
fun navigate(navigate: NavigationState){
launch(Dispatchers.IO) {
when(navigate) {
is NavigationState.Deeplink -> resolveDeeplink(navigate.url)
else -> _navigation.emit(navigate)
}
}
}
private fun resolveDeeplink(url: String) {
val uri = Uri.parse(url)
// missing navigation to fragment
}
}
open class NavigationState {
object PopBackStack : NavigationState()
data class Navigate(val resId: Int, val bundle: Bundle?) : NavigationState()
data class Deeplink(val url: String) : NavigationState()
data class GameDetail(val gameId: String) : NavigationState()
private fun setupNavigation() {
navController = findNavController(R.id.mainContainer)
val topLevelDestinations = hashSetOf(
R.id.home_fragment,
R.id.database_saved_countries
)
val appBarConfiguration = AppBarConfiguration
.Builder(topLevelDestinations)
.build()
setupWithNavController(binding.toolbar.toolbarMain, navController, appBarConfiguration)
}
我称之为打开新的片段:
NavigationMainComponent().navigate(NavigationState.Navigate(R.id.database_saved_countries, null))
我很清楚一些尴尬的事情会解决这个问题,但我到现在都没找到。提前感谢帮助:D
1条答案
按热度按时间6gpjuf901#
这是由新版本中导航组件的行为导致的。您可以使用以下方法防止透明背景:
首先创建一个基本fragment类,如下所示:
然后扩展这个类的所有片段: