导航回上一个片段不起作用



我正在开发一个简单的应用程序,只需要几个静态屏幕。我从第一个片段开始工作,但永远无法回到任何屏幕。我看过一些视频,比如shorturl.at/jFPRY,但无论如何都能成功。在MainActivity中,我有一个OnCreate方法,在这里我保存实例,设置布局,并向菜单itens上的选项添加一个Listener。

在第一次点击中,当我打开应用程序时,它会去纠正命运。然而,当我点击另一个项目时,它什么也不做,卡住了。我需要将Fragments设置为双向的,换句话说,用户可以在任何时刻从任何片段中查看任何片段。

My OnCreate方法:

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(binding.appBarMain.toolbar)
val drawerLayout: DrawerLayout = binding.drawerLayout
val navView: NavigationView = binding.navView

navView.setNavigationItemSelectedListener {
when (it.itemId) {
R.id.nav_conheca_a_UFTM -> {
supportFragmentManager.beginTransaction()
.replace(R.id.drawer_layout, ConhecaUftmFragment())
.commit()
// Remove the other operations
supportFragmentManager.beginTransaction().addToBackStack(null);
}
R.id.nav_calendario_academico -> {
supportFragmentManager.beginTransaction()
.replace(R.id.drawer_layout, GalleryFragment())
.commit()
// Remove the other operations
supportFragmentManager.beginTransaction().addToBackStack(null);
}
R.id.nav_mural_de_informacoes -> {
supportFragmentManager.beginTransaction()
.replace(R.id.drawer_layout, CalendarioFragment())
.commit()
// Remove the other operations
supportFragmentManager.beginTransaction().addToBackStack(null);
}

}
it.isChecked = true
drawerLayout.closeDrawers()
true
}
supportActionBar?.apply {
setDisplayHomeAsUpEnabled(true)
}
navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main)
val appBarConfiguration = AppBarConfiguration(navController.graph, drawerLayout)
NavigationUI.setupWithNavController(binding.appBarMain.toolbar, navController, appBarConfiguration)
NavigationUI.setupActionBarWithNavController(this, navController, drawerLayout)
}

我还有SupportNavigateUp上的方法:

override fun onSupportNavigateUp(): Boolean {
val navController = this.findNavController(id.nav_host_fragment_content_main)
return navController.navigateUp()
}

这里有一个片段的例子,我有:

class GalleryFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,  container: ViewGroup?,  savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_calendario_academico, container, false)
/* view.setOnClickListener(){ Navigation.findNavController(view).
navigate(R.id.conhecauftmToaprimorando)
}*/
return view
}
override fun onDestroyView() {
super.onDestroyView()
}
}

如果有人能帮助解决这个问题,我会通过我的GitHub链接。

使用NavComponent时,第一种方法是不使用FragmentTransactions。如果您在MainActivity布局上有MenuOptions(我不建议,它应该出现在每个片段上,因此MenuOptions与当前片段相关(,您可以在nav_graph.xml中定义导航,并通过NavigationDirections对象在MainActivity中使用它们。

请访问https://developer.android.com/guide/navigation/navigation-getting-started了解更多信息。

如果您想从GalleryFragment返回到您定义了Popback行为的目的地,您应该调用:findNavController.popBackStack()

最新更新