在主要活动中从一个片段切换到另一个片段

时间:2020-09-24 15:48:23

标签: android kotlin android-fragments

我要实现的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,我认为所有其他片段都从中产生,但是现在在我现有片段的上方生成,并且抽屉按钮不会更改其状态,我想我必须以不同的方式进行所有操作,或者以某种方式传递给当前片段已更改的抽屉导航信息?

2 个答案:

答案 0 :(得分:3)

这是我们如何在Navigation组件库中的片段中导航。我们使用导航来找到导航图中定义的目标片段的ID

binding.createNewBlankFAB.setOnClickListener{
        
    Navigation.findNavController(view).navigate(R.id.createUserFragment);
        }

答案 1 :(得分:-1)

我认为您必须调用“ transaction.add”而不是“ replace”,因为您正在从活动中调用片段。我相信,当您从另一个片段中调用一个片段时,就会调用Replace。