Лучшая практика / обычный способ переключения между 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.

Спасибо за чтение моей проблемы и еще раз большое спасибо за людей, которые нашли время и терпение, чтобы написать ответ!

0 ответов

Другие вопросы по тегам