onDestory, onDetach вызывается при открытии фрагмента - PullRequest
0 голосов
/ 22 сентября 2019

Я разрабатывал приложение, которое стало достаточно большим в коде, когда я заметил эту проблему, поэтому я сделал тестовое приложение, которое содержит нижнюю панель навигации с основным действием и тремя фрагментами (F1, F2, F3) и настроил его с помощьюнавигационная составляющая.Я записал события жизненного цикла первого фрагмента, как показано ниже, и вот что я получил:

public class F1 extends Fragment {

    private OnFragmentInteractionListener mListener;
    private static final String TAG = "F1";
    public F1() {
    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate: ");

    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.d(TAG, "onActivityCreated: ");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy: ");
    }

    @Override
    public void onDetach() {
        super.onDetach();
        Log.d(TAG, "onDetach: ");
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.d(TAG, "onResume: ");
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop: ");
    }

    @Override
    public void onStart() {
        super.onStart();
        Log.d(TAG, "onStart: ");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        Log.d(TAG, "onCreateView: ");
        return inflater.inflate(R.layout.fragment_f1, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        Log.d(TAG, "onViewCreated: ");
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Log.d(TAG, "onDestroyView: ");
    }

    public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        void onFragmentInteraction(Uri uri);
    }
}

При переходе от f1 к f2 logcat:

2019-09-22 14:11:34.648 6580-6580/com.example.navtest D/F1: onStop: 
2019-09-22 14:11:34.648 6580-6580/com.example.navtest D/F1: onDestroyView:

При переходе отf2 обратно к f1 с помощью навигационной панели:

2019-09-22 14:12:41.406 6580-6580/com.example.navtest D/F1: onCreate: 
2019-09-22 14:12:41.406 6580-6580/com.example.navtest D/F1: onCreateView: 
2019-09-22 14:12:41.408 6580-6580/com.example.navtest D/F1: onViewCreated: 
2019-09-22 14:12:41.408 6580-6580/com.example.navtest D/F1: onActivityCreated: 
2019-09-22 14:12:41.408 6580-6580/com.example.navtest D/F1: onStart: 
2019-09-22 14:12:41.408 6580-6580/com.example.navtest D/F1: onResume: 
2019-09-22 14:12:41.410 6580-6580/com.example.navtest D/F1: onDestroy: 
2019-09-22 14:12:41.410 6580-6580/com.example.navtest D/F1: onDetach: 

Кто-нибудь может объяснить это поведение, пожалуйста?Приложение работает нормально, фрагмент виден и работает нормально, так почему вызывается onDestory / onDetach?Это может быть ошибка или что?У меня это было в обоих проектах, и общим для них является то, как я настраиваю нижнюю панель приложений в основной деятельности, что является нормальным способом, но я все равно опубликую это:

NavController navController = Navigation.findNavController(this, R.id.navHostFragment);
BottomNavigationView appBar = findViewById(R.id.appBar);
NavigationUI.setupWithNavController(appBar, navController);

РЕДАКТИРОВАТЬ: Первый фрагмент, проверенный выше, был местом назначения, запись фрагмента два, все кажется нормальным, только когда я назначаю его (фрагмент 2), как фрагмент назначения начала, один действует как ожидалось, а фрагмент два показывает странное поведение,Я думаю, что проблема именно в начальном фрагменте назначения.

1 Ответ

1 голос
/ 22 сентября 2019

Проверяли ли вы "TAG" на обоих фрагментах ?? .... возможно, вы указали значение F1 для TAG на обоих фрагментах F1 и F2 ...

В любых других случаях это поведение неожидается ... так что если ваше приложение не сталкивается с какой-либо проблемой, то TAG может иметь место только

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