[英]How to change the view of the previous fragment after returning to it using the back button?
我的活動有兩個片段。
當我單擊第一個時,第二個被稱為。
我想要的是:如果單擊“后退”按鈕,我想返回到第一個片段(正在工作),但是我想在某個元素上將可見性設置為VISIBLE (如果第一個片段用來調用)僅返回)
我怎么做 ?
我嘗試過這樣的事情(在我的主要片段中),我在另一個主題中找到了這個主意,但這總是在我的主要活動中觸發:
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函數 。
您必須使用interface創建回調。
一個好的方法是通過活動意圖在第二個片段上傳遞一些標志,並在onResume()
的第一個片段上捕獲它
如果您需要更多信息,請告訴我
假設您的第二個Fragment
替換了第一個Fragment
(即使用FragmentTransaction#replace
),則您的第一個Fragment(我們將它們分別稱為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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.