#java #android #android-fragments #fragment
#java #Android #android-фрагменты #фрагмент
Вопрос:
Я пытаюсь показать несколько фрагментов в контейнере FrameLayout. Основная идея заключается в использовании счетчика для выбора другого фрагмента, который будет отображаться в контейнере. Я пытаюсь добавить их программно, и для этого я создал один XML-файл для каждого дня недели, что я и пытаюсь показать.
// Set up the spinner to select days of the week.
Spinner spinner = (Spinner) weekView.findViewById(R.id.day_selecter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
// For each day of the week, create a new instance of Switches
// get an instance of FragmentTransaction from your Activity
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
Fragment frag = fm.findFragmentByTag(Integer.toString(pos));
if(frag == null) {
switch(pos) {
case 0: frag = new mondayFragment();
break;
case 1: frag = new tuesdayFragment();
break;
case 2: frag = new wednesdayFragment();
break;
case 3: frag = new thursdayFragment();
break;
case 4: frag = new fridayFragment();
break;
case 5: frag = new saturdayFragment();
break;
case 6: frag = new sundayFragment();
break;
}
fragmentTransaction.add(R.id.week_program_switches, frag, Integer.toString(pos));
}
else
fragmentTransaction.replace(R.id.week_program_switches, frag, Integer.toString(pos));
fragmentTransaction.commit();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
Программе удается загрузить фрагмент, соответствующий первому дню недели, то есть фрагменту mondayFragment, в контейнер. Каждый фрагмент содержит текстовые поля и флажки, поэтому мне нужно сохранить представление каждого загруженного фрагмента. Иногда приложение позволяет мне выбрать другой день, но содержимое предыдущего фрагмента переносится, и в конечном итоге приложение завершает работу с ошибкой IllegalStateException: Day уже добавлен в транзакцию фрагмента. в других случаях простой выбор другого дня в счетчике немедленно приводит к сбою приложения с той же ошибкой. Мне действительно нужна ваша помощь в этом, так как у меня совсем нет идей.
Несколько замечаний: 1. Я не добавил ни одного фрагмента статически ни в один макет. Я видел, что это является причиной многих связанных с этим проблем. 2. Первоначально я намеревался использовать один фрагмент и создать несколько экземпляров в контейнере FrameLayout, но у меня возникли аналогичные проблемы с сохранением содержимого в каждом экземпляре.
Комментарии:
1. происходит ли сбой только при повторном нажатии на один и тот же фрагмент дважды?
2. Я думаю, что, возможно, я исправил это, просто заменив FragmentTransaction.add() на FragmentTransaction.replace(). Теперь содержимое не перекрывается, и пока никаких сбоев нет .. пальцы скрещены