Вернитесь к уже созданному фрагменту

#java #android #android-fragments #fragment

Вопрос:

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

  1. Я нахожусь в главной роли;
  2. Здесь есть кнопка, которая создает фрагмент;
  3. Включите кнопку включения/выключения;
  4. Я возвращаюсь к основной деятельности;
  5. Я нажимаю на кнопку и перехожу к созданному фрагменту;
  6. Кнопка включения/выключения включена;

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

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

Это текущий код, который у меня есть:

Основная деятельность:

 public void onStartSensors(View view) {
    if(count > 0){
        getSupportFragmentManager().popBackStack();
    }
    else{
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        transaction.add(R.id.container, new StartupFragment());
        transaction.addToBackStack(null);
        transaction.commit();
        count  ;
    }
}
 

ОБНОВЛЕНИЕ:
В приведенной ниже ссылке я получил представление о текущем состоянии моего приложения. Когда я во второй раз вхожу в фрагмент, я хочу, чтобы акселерометр оставался включенным.
https://ibb.co/Sc7QZDt
Я уже пробовал метод popBackStack(), добавил тег, имя и т. Д., Но он не работает.
Когда я выхожу из фрагмента, метод getFragmentByTag() возвращает значение null.

Это текущее состояние кода:

 public void onStartSensors(View view) {
    FragmentManager fm = getSupportFragmentManager();
    if(count > 0){
        StartupFragment f1= (StartupFragment) fm.findFragmentByTag("A");
        FragmentTransaction transaction=fm.beginTransaction();
        if( f1 != null) {
            transaction.attach(f1);
            transaction.addToBackStack("sensors");
            transaction.commit();
        }
    }
    else{
        StartupFragment f1=new StartupFragment();
        FragmentTransaction transaction = fm.beginTransaction();
        transaction.add(R.id.container, f1, "A");
        transaction.addToBackStack("sensors");
        transaction.commit();
        count  ;
    }
}
 

Комментарии:

1. I go back to the mainActivity; откуда ? возможно, я что-то упускаю, но из того, что вы объяснили, вы все еще должны заниматься тем же самым делом ?

2. Насколько я понимаю, вы добавляете фрагмент, который будет отображаться поверх действия, и вы хотите, чтобы он был каким-то образом скрыт и показан?

3. Во-первых, вы создаете новый фрагмент при каждом вызове функции, во-вторых, если вы хотите, чтобы задний стек работал, то почему вы передаете null функции addToBackStack

4. @AsadMukhtar Я уже пробовал с нулем и с тегом, и оба способа не работают

5. @a_local_nobody Когда я говорю «Я возвращаюсь к основной активности», это означает, что я выхожу из фрагмента.

Ответ №1:

Мне кажется, что вы хотите добавить фрагмент для отображения поверх текущего действия, который можно скрыть и показать по требованию. Глядя на ваш код, каждый раз, когда вы «показываете» фрагмент, вы создаете новый StartupFragment , поэтому поведение, которое вы испытываете, имеет смысл.

Поэтому я бы вместо этого рекомендовал добавлять фрагмент при запуске действия, а затем использовать FragmentTransaction.show(Fragment) и FragmentTransaction.hide(Fragment) для переключения его видимости.