it-swarm.com.ru

Фрагмент: какой обратный вызов вызывается при нажатии кнопки назад и его настройке

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

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. Как я могу настроить кнопку back click listener в классе MyFragment? (пожалуйста, не предлагайте мне делать myFragment.getView().setOnclickListener, но делайте это в классе MyFragment)

14
Leem.fin

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

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

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

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

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

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

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

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

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
    }
}
22
Taylor Clark

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

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

0
Darish