我有一个问题,我的导航,首先我有一个碎片,其中有一个回收视图,当我使用导航移动到另一个碎片(B片段),回到我的A片段,我似乎无法点击回收器视图中包含的项目,它引发了我“查看androidx.constraintlayout.widget.constraintLayout{1f 8 e1 b2 V.E............. 0,0- 1080,1823}没有NavController集””。如果我不在Beetween片段中移动(停留在片段中),它工作得很好。
适配器上的onItemClicked调用findNavController()。
附言:抱歉我的英语不好,因为我不是本地人,这是我的第一篇文章
这是我的主要活动:'
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainMenuBinding
private lateinit var bottomNav: BottomNavigationView
private lateinit var navController: NavController
val authViewModel: AuthViewModel by viewModels()
val TAG: String = "ReceitaListingFragment"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
startUI()
}
private fun setNavController(){
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host) as NavHostFragment
navController = navHostFragment.navController
setupWithNavController(bottomNav,navController)
}
private fun startUI() {
binding = ActivityMainMenuBinding.inflate(layoutInflater)
setContentView(binding.root)
bottomNav = findViewById(R.id.bottomNavigationView)
setNavController()
bottomNav.setOnItemSelectedListener {
when (it.itemId){
R.id.recipes -> {
val connected_to_internet:Boolean = isOnline(this)
val fragment:Fragment = RecipeListingFragment()
fragment.arguments = Bundle().apply {
putBoolean("connectivity",connected_to_internet)
}
replaceFragment(RecipeListingFragment())
}
R.id.profile -> replaceFragment(ProfileFragment())
}
true
}
}
private fun replaceFragment(fragment : Fragment){
val fragmentManager = supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.nav_host,fragment)
fragmentTransaction.commit()
}
}
'
这是我的main_activity.xml:
'
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/app_navigation" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigationView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#E3E3E4"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:itemIconTint="@color/bordeux"
app:itemTextColor="@color/bordeux"
app:menu="@menu/bottom_nav_menu" />
</androidx.constraintlayout.widget.ConstraintLayout>
'
这是我如何在RecipeListingFragment中初始化我的适配器:
'
private val adapter by lazy {
RecipeListingAdapter(
onItemClicked = {pos,item ->
findNavController().navigate(R.id.action_receitaListingFragment_to_receitaDetailFragment,Bundle().apply {
putParcelable("note",item)
})
},
this.authModel
)
}
'
这是我如何在RecipeListingFragment中设置我的适配器:
'
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.recyclerView.adapter = adapter
}
'
这是我的导航.xml:
'
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/app_navigation"
app:startDestination="@id/receitaListingFragment">
<fragment
android:id="@+id/receitaListingFragment"
android:name="com.example.projectfoodmanager.ui.recipe.RecipeListingFragment"
android:label="fragment_receita_listing"
tools:layout="@layout/fragment_recipe_listing" >
<action
android:id="@+id/action_receitaListingFragment_to_receitaDetailFragment"
app:destination="@id/receitaDetailFragment" />
<action
android:id="@+id/action_receitaListingFragment_to_profileFragment"
app:destination="@id/profileFragment" />
</fragment>
<fragment
android:id="@+id/receitaDetailFragment"
android:name="com.example.projectfoodmanager.ui.recipe.RecipeDetailFragment"
android:label="fragment_recipe_detail"
tools:layout="@layout/fragment_recipe_detail" >
<action
android:id="@+id/action_receitaDetailFragment_to_receitaListingFragment"
app:destination="@id/receitaListingFragment" />
</fragment>
<fragment
android:id="@+id/profileFragment"
android:name="com.example.projectfoodmanager.ui.profile.ProfileFragment"
android:label="fragment_profile"
tools:layout="@layout/fragment_profile" >
<action
android:id="@+id/action_profileFragment_to_receitaListingFragment"
app:destination="@id/receitaListingFragment" />
</fragment>
<fragment
android:id="@+id/calenderFragment"
android:name="com.example.projectfoodmanager.ui.views.CalenderFragment"
android:label="fragment_calender"
tools:layout="@layout/fragment_calender" >
</fragment>
<fragment
android:id="@+id/favoritesFragment"
android:name="com.example.projectfoodmanager.ui.views.FavoritesFragment"
android:label="fragment_favorites"
tools:layout="@layout/fragment_favorites" >
</fragment>
<fragment
android:id="@+id/goalFragment"
android:name="com.example.projectfoodmanager.ui.views.GoalFragment"
android:label="fragment_goal"
tools:layout="@layout/fragment_goal" >
</fragment>
</navigation>
'
1条答案
按热度按时间xeufq47z1#
尝试使用RecyclerView并将片段导航移动到您的Fragment。
您的适配器:
}
在片段中:
)