Управление фрагментом кода из активности при нажатии назад - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть действие, макет которого представляет собой фрагмент, который может быть заполнен различными классами фрагментов.Дело в том, что когда я нахожусь во Фрагменте X и нажимаю назад, я хотел бы переопределить метод onBackPressed, чтобы выполнить метод, спрашивающий пользователя, сохранять ли входные данные.Однако проблема в том, что onBackPressed может быть перезаписан только из действия, тогда мой вопрос:

Должен ли я создать открытый метод во Fragment X и вызвать его из перезаписанного метода onBackPressed или использовать интерфейсы или что-то ещееще?

Я уже проверил другие связанные посты, например, как вернуться к предыдущему фрагменту без потери данных с помощью addToBackStack, но я думаю, что это другой вопрос ..

1 Ответ

0 голосов
/ 08 февраля 2019

Когда я хотел сделать что-то подобное, я создал теги для фрагментов и объект Fragment в родительском действии с именем mCurrentFragment.Каждый раз, когда я загружал фрагмент, я назначал его mCurrentFragment.Поэтому я переопределил бы onbackPressed () из моей деятельности и затем проверил экземпляры фрагмента:

@Override
public void onBackPressed() {
    if (mCurrentFragment instanceof FragmentA) {
        //Do something
        //e.g. mCurrentFragment.save();
    } else if (mCurrentFragment instanceof FragmentB) {
        //Do something else
    } else {
        super.onBackPressed()
    }
}

Если вы хотите вызвать метод из фрагмента, вы просто используете созданный вами объект Fragment (в моем случаеmCurrentFragment) и получить доступ ко всем его открытым методам (как в примере для FragmentA выше)

§EDITED для включения кода из комментариев

...