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”传递值并捕获另一个片段