首页 > 解决方案 > 多次按下片段调用按钮问题

问题描述

我有一个主要活动,它有一个框架和两个按钮。单击每个按钮会显示一个片段。

应用图片:</p>

在此处输入图像描述

代码:

package com.example.activitylifecycle

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
import androidx.fragment.app.Fragment

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val firstFragment = FirstFragment()
        val secondFragment = SecondFragment()

        supportFragmentManager.beginTransaction().apply {
            replace(R.id.flFragment, firstFragment)
            commit()
        }

        val btnFragmentOne = findViewById<Button>(R.id.btnFragment1)
        val btnFragmentTwo = findViewById<Button>(R.id.btnFragment2)

        btnFragmentOne.setOnClickListener {
            supportFragmentManager.beginTransaction().apply {
                replace(R.id.flFragment, firstFragment)
                addToBackStack(null)
                commit()
            }
        }

        btnFragmentTwo.setOnClickListener {
            supportFragmentManager.beginTransaction().apply {
                replace(R.id.flFragment, secondFragment)
                addToBackStack(null)
                commit()
            }
        }

    }

}

我正在使用 addToBackStack() 函数来确保当有人按下 fragment2 按钮并且之后他们按下返回按钮时显示 fragment1。它运行良好。

但是当我按下 fragment2 按钮 5 次时。我必须按返回按钮 5 次才能到达 fragment1。

如何在再次添加之前检查片段是否已经在堆栈中?

标签: androidkotlinandroid-fragments

解决方案


当您将其添加到堆栈中时,每次按下按钮时都会添加它。

因此,如果您按 Fragment2 按钮 5 次,它会被添加 5 次到堆栈中,并且您需要按 5 次后退按钮才能从堆栈中删除所有 5 个按钮并返回到 Fragment1

您需要编辑代码,以便如果片段已经存在,则不应再次将其添加到堆栈中


推荐阅读