簡體   English   中英

使用“后退”按鈕返回前一個片段后如何更改其視圖?

[英]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(我們將它們分別稱為FragmentAFragmentB )將被暫停(即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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM