我有一个带有 navGraph 的活动和一个带有 2 个菜单项的底部导航栏。我的问题是我的底部导航栏到处出现,detailFragment、aboutFragment、signInFragment等等。
val navController = this.findNavController(R.id.myNavHostFragment)
val appBarConfiguration = AppBarConfiguration.Builder(
R.id.contactsFragment,
R.id.profileFragment
).build()
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration)
val navView: BottomNavigationView = findViewById(R.id.nav_view)
NavigationUI.setupWithNavController(navView, navController)
Run Code Online (Sandbox Code Playgroud)
我如何限制它只显示在我的菜单项上的 2 个片段上?
这就是我解决它的方法
navController.addOnDestinationChangedListener{ _, nd: NavDestination, _->
if(nd.id == R.id.contactsFragment || nd.id == R.id.profileFragment){
navView.visibility = View.VISIBLE
}else{
navView.visibility = View.GONE
}
Run Code Online (Sandbox Code Playgroud) kotlin android-jetpack android-bottomappbar android-jetpack-navigation
我想知道在开发 Android 应用程序时编写额外代码以在 Kotlin 中实现数据绑定的好处。因为 Kotlin 扩展已经允许我们直接访问视图,而无需 findViewById。
android kotlin kotlin-android-extensions android-databinding
我有一个应用程序,它从 API获取158 个项目的列表,将其存储在 Room 中,然后将其显示给用户。RoomDB 是事实的来源。
这是我的 ViewModel 上从数据库获取结果的代码:
private val pagingConfig =
PagingConfig(pageSize = 20, enablePlaceholders = false, maxSize = 300)
fun getList(filters: Filters): Flow<PagingData<Character>> {
return Pager(pagingConfig) {
repository.getCharacters(filters)
}.flow.map {
it.asDomainModel()
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的片段上填充适配器的代码:
private fun fetchData(filters: Filters) {
lifecycleScope.launch {
charactersViewModel.getList(filters).collectLatest { pagedList ->
characterAdapter.submitData(pagedList)
}
}
}
Run Code Online (Sandbox Code Playgroud)
当前行为:
我已经尝试过的:
由于我获取数据异步我使用这段代码从这个尝试的文章,以防止在加载数据时适配器是空的。但它没有用
characterAdapter.stateRestorationPolicy = RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY
Run Code Online (Sandbox Code Playgroud)
我期望达到的目标:
能够滚动到列表底部并在不丢失滚动位置的情况下进行配置更改“无需随着列表变大而增加我的pageSize ”
android kotlin android-architecture-components android-paging android-paging-library