Как изменить вид предыдущего фрагмента после возврата к нему с помощью кнопки «Назад»? - PullRequest
0 голосов
/ 25 января 2019

У меня есть действие с двумя фрагментами.

Второй вызывается, когда я нажимаю на что-то первым.

Я хочу вот что: если я нажимаю «назад»кнопку, я хочу вернуться к первому фрагменту (который работает), но я хочу установить видимость для VISIBLE для элемента (если первый фрагмент вызывается только при нажатии back)

Как мне это сделать?

Я пробовал что-то подобное (в своем основном фрагменте), я нашел идею в другой теме, но это триггер всегда в моей основной деятельности:

    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 и меняю его каждый раз, когда мне это нужно, но это только временно.

Ответы [ 3 ]

0 голосов
/ 25 января 2019

Хороший подход - это передать какой-то флаг во втором фрагменте по цели деятельности и захватить его в первом фрагменте на onResume()

Если вам нужна дополнительная информация, просто дайте мне знать

0 голосов
/ 25 января 2019

Если ваша вторая Fragment заменяет первую (то есть, используя FragmentTransaction#replace), ваш первый фрагмент (мы будем называть их FragmentA и FragmentB) будет приостановлен (то есть onPause() будет вызываться FragmentA).

Когда вы нажимаете кнопку «назад», обратный стек прерывается, и FragmentA возобновляется (т.е. будет вызываться onResume()).

Я бы порекомендовал сохранить логический флаг в FragmentA и установить его на true при отображении FragmentB.Затем в 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
    }
}    
0 голосов
/ 25 января 2019

Я плохо разбираюсь в грамматике.

Первый фрагмент не вызывает функция возобновления при возврате.

Вы должны создать обратный вызов с интерфейсом .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...