#java #android #android-fragments #fragment
Вопрос:
Я работаю над приложением для Android, которое использует фрагменты. Предполагается, что код должен выполнять следующие действия:
- Я нахожусь в главной роли;
- Здесь есть кнопка, которая создает фрагмент;
- Включите кнопку включения/выключения;
- Я возвращаюсь к основной деятельности;
- Я нажимаю на кнопку и перехожу к созданному фрагменту;
- Кнопка включения/выключения включена;
Я пытался реализовать это, но это не работает. На шаге 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)
для переключения его видимости.