Фрагмент: какой обратный вызов вызывается при нажатии кнопки назад и настройке - PullRequest
14 голосов
/ 14 марта 2012

У меня есть фрагмент:

public class MyFragment extends Fragment{
     ...
     @Override
     public View onCreateView(...){...}    
     ...
}

Я создаю его экземпляр:

MyFragment myFragment = new MyFragment();

Я использую приведенный выше фрагмент для замены текущего фрагмента:

FragmentManager fragmentManager = activity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

// replace fragment
fragmentTransaction.replace(R.id.fragment_placeholder, myFragment, "myTag");

// NOTE: I did not add to back stack

Теперь на экране отображается myFragment.ПРИМЕЧАНИЕ: я не добавил myFragment в задний стек .

Мои два вопроса:

1. Еслитеперь я нажимаю кнопку мобильного телефона назад , какой фрагмент жизненного цикла фрагмента будет вызван ??

2. Как я могу настроить кнопку возврата click listener в классе MyFragment?(пожалуйста, не предлагайте мне сделать myFragment.getView().setOnclickListener, но делайте это в MyFragment классе)

Ответы [ 2 ]

22 голосов
/ 11 апреля 2012

Вопрос 1: См. http://developer.android.com/reference/android/app/Fragment.html#Lifecycle:

"Поскольку фрагмент больше не используется, он проходит серию обратных вызовов:

onPause ()- фрагмент больше не взаимодействует с пользователем либо потому, что его действие приостановлено, либо операция фрагмента изменяет его в действии.

onStop () - фрагмент больше не виден пользователю, так как его действиеостанавливается или операция фрагмента изменяет его в действии.

onDestroyView () - позволяет фрагменту очищать ресурсы, связанные с его View.

onDestroy () - вызывается для окончательной очисткисостояния фрагмента.

onDetach () - вызывается непосредственно перед тем, как фрагмент больше не связан с его активностью. "

Вопрос 2: Если вы должны знать, чтоэто была кнопка «назад» конкретно , которая вызывает обратные вызовы. Вы можете зафиксировать нажатие кнопки «назад» в деятельности вашего фрагмента и использовать yнаш собственный способ справиться с этим:

public class MyActivity extends Activity
{
    //...
    //Defined in Activity class, so override
    @Override
    public void onBackPressed()
    {
        super.onBackPressed();
        myFragment.onBackPressed();
    }
}

public class MyFragment extends Fragment
{
    //Your created method
    public void onBackPressed()
    {
        //Handle any cleanup you don't always want done in the normal lifecycle
    }
}
0 голосов
/ 19 января 2019

androidx.activity 1.0.0-alpha01 выпущен и представляет ComponentActivity, новый базовый класс существующих FragmentActivity и AppCompatActivity.

Теперь вы можете зарегистрироватьсяOnBackPressedCallback через addOnBackPressedCallback для получения обратных вызовов onBackPressed () без необходимости переопределять метод в вашей деятельности.

...