Android 使用“后退”按钮返回到上一个片段后,如何更改其视图?

Android 使用“后退”按钮返回到上一个片段后,如何更改其视图?,android,kotlin,fragment,onbackpressed,Android,Kotlin,Fragment,Onbackpressed,我有一个有两个片段的活动 当我点击第一个按钮时,第二个按钮被调用 我想要的是:如果我单击“后退”按钮,我想返回到第一个片段(正在工作),但我想在元素上设置可见性为可见(如果第一个片段仅通过反按调用) 我该怎么做 我尝试过类似的东西(在我的主要片段中),我在另一个主题中找到了这个想法,但这始终是我主要活动的触发点: override fun onResume() { super.onResume() view?.isFocusableInTouchMode = true

我有一个有两个片段的活动

当我点击第一个按钮时,第二个按钮被调用

我想要的是:如果我单击“后退”按钮,我想返回到第一个片段(正在工作),但我想在元素上设置可见性为可见(如果第一个片段仅通过反按调用)

我该怎么做

我尝试过类似的东西(在我的主要片段中),我在另一个主题中找到了这个想法,但这始终是我主要活动的触发点:

    override fun onResume() {
    super.onResume()
    view?.isFocusableInTouchMode = true
    view?.requestFocus()
    view?.setOnKeyListener { v, keyCode, event ->
        if(event.action == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){
            Log.i(TAG, "backpress pressed")
            return@setOnKeyListener true
        }
        return@setOnKeyListener false
    }
}
临时解决办法:


我创建了一个值为true或false的伴生对象,每次需要时都会更改它,但它只是暂时的。

我不擅长语法

第一个片段在返回时不调用resume函数


您必须使用接口创建回调。

一个好的方法应该是通过活动意图在第二个片段上传递一些标志,并在
onResume()上的第一个片段上捕获它。


如果您需要额外的信息,只需让我知道

假设您的第二个
片段
替换了第一个片段(即使用
FragmentTransaction#replace
),您的第一个片段(我们称之为
FragmentA
FragmentB
)将被暂停(即
onPause()
将被称为
FragmentA

当您按下后退按钮时,将弹出后退按钮,并将恢复
FragmentA
(即调用
onResume()

我建议在
FragmentA
中保存一个布尔标志,并在显示
FragmentB
时将其设置为
true
。然后,在
FragmentA#onResume
中,您可以检查标志是否设置为
true
,并在处理所需案例时将其设置回
false

例如,类似于:

private const val STATE_WAITING_FOR_FRAGMENT_B = "state_waiting_b"

class FragmentA : Fragment() {
    private var isWaitingForFragmentB: Boolean = false

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        if (savedInstanceState != null) {
            isWaitingForFragmentB = savedInstanceState.getBoolean(STATE_WAITING_FOR_FRAGMENT_B)
        }
    }

    override fun onResume() {
        super.onResume()
        if (isWaitingForFragmentB) {
            isWaitingForFragmentB = false
            // handle your view state here
        }
    }

    override fun onSaveInstanceState(savedInstanceState: Bundle) {
        super.onSaveInstanceState(savedInstanceState)
        savedInstanceState.putBoolean(
            STATE_WAITING_FOR_FRAGMENT_B,
            isWaitingForFragmentB
        )
    }

    private fun showFragmentB() {
        isWaitingForFragmentB = true
        // do fragment transaction here
    }
}    

有任何代码示例向我们展示吗?参见y更新的答案您有听众概念吗?@ProjetSin请停止在您的问题标题中使用关键字,您的标签位于底部,以指示您问题的范围。。。但这只是暂时的这不是你想要的吗?你所说的“听众概念”是什么意思@好的,我不说了,对不起。是的,这是我想要的,它正在工作,但我想知道是否有更合适的解决方案(这就是为什么它是暂时的)是的,请给我更多的细节你到底不明白什么?标志,它是什么?只需通过“intent.putExtra”传递值并捕获另一个片段