我要实现的https://i.stack.imgur.com/lhp10.png示例
我陷入了需要从defaultFragment切换到createUserFragment的部分
我将此按钮附加到了我的按钮上,但是当我按下按钮时却什么也没有发生,不确定那里出了什么问题
MainActivity
class MainActivity : AppCompatActivity() {
lateinit var appBarConfiguration: AppBarConfiguration
lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
navController = findNavController(R.id.hostFragment)
appBarConfiguration = AppBarConfiguration(navController.graph,drawer_layout)
NavigationUI.setupActionBarWithNavController(this, navController,drawer_layout)
NavigationUI.setupWithNavController(navigation_drawer,navController)
}
}
override fun onSupportNavigateUp(): Boolean {
return NavigationUI.navigateUp(navController,appBarConfiguration)
}
defaultFragment
class defaultFragment : Fragment() {
private lateinit var binding: defaultFragmentBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
binding = defaultFragmentBinding.inflate(inflater)
return (binding.root)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.createNewBlankFAB.setOnClickListener{
val transaction = (activity as MainActivity).supportFragmentManager.beginTransaction()
transaction.replace(R.id.defaultFragment, createUserFragment())
transaction.disallowAddToBackStack()
transaction.commit()
}
}
}
我的问题是: 1)我该如何修理我的东西? 2)它将正常工作吗?即没有内存泄漏或其他一些时髦的东西 3)我是否必须使用另一个片段进行数据输入,或者也许还有另一种方法?
更新 我什至不知道这是如何工作的,但是显然我正在替换错误的片段,我将transaction.replace中的R.id.defaultFragment切换为R.id.hostFragment,我认为所有其他片段都从中产生,但是现在在我现有片段的上方生成,并且抽屉按钮不会更改其状态,我想我必须以不同的方式进行所有操作,或者以某种方式传递给当前片段已更改的抽屉导航信息?
答案 0 :(得分:3)
这是我们如何在Navigation组件库中的片段中导航。我们使用导航来找到导航图中定义的目标片段的ID
binding.createNewBlankFAB.setOnClickListener{
Navigation.findNavController(view).navigate(R.id.createUserFragment);
}
答案 1 :(得分:-1)
我认为您必须调用“ transaction.add”而不是“ replace”,因为您正在从活动中调用片段。我相信,当您从另一个片段中调用一个片段时,就会调用Replace。