无法在Android中删除碎片

发布于 2025-02-06 22:22:40 字数 1748 浏览 0 评论 0原文

我有两个片段,将它们命名为“红色”和“蓝色”和三个按钮。第一个添加了“红色”片段并将背景更改为红色,第二个添加了“蓝色”片段并将背景更改为蓝色,第三个必须去除当前片段并将颜色更改为上一个片段的颜色。

问题在于,当我单击“删除”按钮时,我会看到烤面包,即删除了片段,但布局不会变为上一个片段的颜色。

var fragment1 = FirstFragment()
var fragment2 = SecondFragment()
lateinit var binding: ActivityMainBinding
var counter: Int = 0

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)


    binding.redBtn.setOnClickListener {
        supportFragmentManager
            .beginTransaction()
            .add(R.id.placeHolder, fragment1)
            .addToBackStack("Red")
            .commit()
        counter++
        binding.count.text = "$counter"
    }

    binding.blueBtn.setOnClickListener {
        supportFragmentManager
            .beginTransaction()
            .replace(R.id.placeHolder, fragment2)
            .addToBackStack("Blue")
            .commit()
        counter++
        binding.count.text = "$counter"
    }

    binding.removeBtn.setOnClickListener {

        val fragmentInstance = supportFragmentManager.findFragmentById(R.id.placeHolder)

        if(fragmentInstance is FirstFragment){
            supportFragmentManager.beginTransaction()
                .remove(FirstFragment())
                .commit()
            Toast.makeText(this, "Removed Red Fragment", Toast.LENGTH_SHORT).show()
        } else {
            supportFragmentManager.beginTransaction()
                .remove(SecondFragment())
                .commit()
            Toast.makeText(this, "Removed Blue Fragment", Toast.LENGTH_SHORT).show()
        }

        counter--
        binding.count.text = "$counter"
    }


}

}

I have two fragments, named them "Red" and "Blue" and three buttons. The first one adds "Red" fragment and changes the background to red color, the second one adds "Blue" fragment and changes the background to blue color and the third one has to remove the current fragment and change the color to the previous fragment's color.

The problem is that when I click the remove button I see a toast that the fragment is removed but the layout doesn't change to the color of the previous fragment.

var fragment1 = FirstFragment()
var fragment2 = SecondFragment()
lateinit var binding: ActivityMainBinding
var counter: Int = 0

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)


    binding.redBtn.setOnClickListener {
        supportFragmentManager
            .beginTransaction()
            .add(R.id.placeHolder, fragment1)
            .addToBackStack("Red")
            .commit()
        counter++
        binding.count.text = "$counter"
    }

    binding.blueBtn.setOnClickListener {
        supportFragmentManager
            .beginTransaction()
            .replace(R.id.placeHolder, fragment2)
            .addToBackStack("Blue")
            .commit()
        counter++
        binding.count.text = "$counter"
    }

    binding.removeBtn.setOnClickListener {

        val fragmentInstance = supportFragmentManager.findFragmentById(R.id.placeHolder)

        if(fragmentInstance is FirstFragment){
            supportFragmentManager.beginTransaction()
                .remove(FirstFragment())
                .commit()
            Toast.makeText(this, "Removed Red Fragment", Toast.LENGTH_SHORT).show()
        } else {
            supportFragmentManager.beginTransaction()
                .remove(SecondFragment())
                .commit()
            Toast.makeText(this, "Removed Blue Fragment", Toast.LENGTH_SHORT).show()
        }

        counter--
        binding.count.text = "$counter"
    }


}

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

自由范儿 2025-02-13 22:22:41

它不会直接删除,

  • 确保创建第一个和第二片片段的对象

,然后当您从fragment Manager中添加或删除片段时,请使用相同的片段

对象
fragment1和fragment2

It will not remove directly

  • make sure create object of First and Second Fragment

Then when you add or remove fragment from fragment manager use the same fragment object

Like you created
fragment1 and fragment2

九歌凝 2025-02-13 22:22:41

您好,我认为您只能通过像这样删除Aleady创建的Framgents对象:


    binding.removeBtn.setOnClickListener {

        val fragmentInstance = supportFragmentManager.findFragmentById(R.id.placeHolder)

        if(fragmentInstance is FirstFragment){
            supportFragmentManager.beginTransaction()
                .remove(fragment1)
                .commit()
            Toast.makeText(this, "Removed Red Fragment", Toast.LENGTH_SHORT).show()
        } else {
            supportFragmentManager.beginTransaction()
                .remove(fragment2)
                .commit()
            Toast.makeText(this, "Removed Blue Fragment", Toast.LENGTH_SHORT).show()
        }

        counter--
        binding.count.text = "$counter"
    }

您的问题是每次点击删除btn将创建新的片段实例,而不是已经创建的对象

Hello i think you have just to pass the framgents objects that aleady createed to be removed like this:


    binding.removeBtn.setOnClickListener {

        val fragmentInstance = supportFragmentManager.findFragmentById(R.id.placeHolder)

        if(fragmentInstance is FirstFragment){
            supportFragmentManager.beginTransaction()
                .remove(fragment1)
                .commit()
            Toast.makeText(this, "Removed Red Fragment", Toast.LENGTH_SHORT).show()
        } else {
            supportFragmentManager.beginTransaction()
                .remove(fragment2)
                .commit()
            Toast.makeText(this, "Removed Blue Fragment", Toast.LENGTH_SHORT).show()
        }

        counter--
        binding.count.text = "$counter"
    }

your problem is every click on remove btn will create new instance of fragment not the object already created

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文