Лучшая практика / обычный способ переключения между 2 фрагментами в FrameLayout
Я работаю над приложением, у которого есть 1 действие с 2 кнопками (Map и Listview). При нажатии на кнопки фрагмент в FrameLayout должен измениться от просмотра списка к просмотру карты (или от просмотра карты к просмотру).
Я получил это работает, и фрагменты показывают данные точно, как я хочу, НО...
У меня есть несколько проблем при переключении между фрагментами. Я боролся с кодом, и лучшее, что я получил, это:
FragmentManager fragmentManager;
Fragment listOverview;
AlertOverviewMapsFragment mapsOverview;
@Bind(R.id.fr_overviewContainer) FrameLayout fr_overviewContainer;
@OnClick(R.id.btn_list_overview) void openListOverview()
{
// Add the fragment to the 'fragment_container' FrameLayout
if (listOverview == null) { listOverview = new AlertOverviewListFragment();}
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fr_overviewContainer.removeAllViews();
fragmentTransaction.add(R.id.fr_overviewContainer, listOverview).commit();
}
@OnClick(R.id.btn_maps_overview) void openMapsOverview()
{
// Add the fragment to the 'fragment_container' FrameLayout
if (mapsOverview == null){ mapsOverview = new AlertOverviewMapsFragment();}
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fr_overviewContainer.removeAllViews();
fragmentTransaction.add(R.id.fr_overviewContainer, mapsOverview).commit();
}
Проблема в том, что когда я нажимаю второй раз на кнопку, приложение вылетает, и я получаю java.lang.IllegalStateException: Fragment already added
ошибка. Я понимаю, что это означает, что я добавил фрагмент к менеджеру (или транзакции, не знаю). Я могу создать или найти некоторые обходные пути для этого, но так как в этом нет ничего нового, я ищу обычный способ переключения (замены) между двумя фрагментами.
Фрагменты содержат данные, которые загружаются из Интернета, будет хорошо, когда данные будут сохранены и загружены снова путем перезагрузки фрагмента. (поэтому пользователь видит старые данные, когда они снова обновляются в фоновом режиме)
Пример кода CLEAR был бы хорош.....
я прочитал кое-что о диспетчере фрагментов и транзакциях, и поэтому, насколько я понимаю, менеджер делает возможным добавлять, удалять, удалять......... фрагменты из транзакции? так что мне нужно 1 транзакция на деятельность? или это скручено? так менеджер содержит фрагменты? эта часть не понятна и действительно сложна для меня. Я счастлив, когда кто-то может помочь мне с решением моей проблемы, и было бы хорошо, если бы кто-то мог объяснить, как транзакции и менеджеры работают действительно ПРОСТО, потому что я только начал программировать приложения для Android.
Спасибо за чтение моей проблемы и еще раз большое спасибо за людей, которые нашли время и терпение, чтобы написать ответ!