2016-01-06 2 views
-1

Может кто-нибудь объяснить, почему этот код не работает?Android заменить фрагмент на существующую версию

Fragment f = fragmentManager.findFragmentByTag(tag); 

    if (f == null) { 
     fragmentManager.beginTransaction().replace(R.id.protokoll_content, fragment, tag).commit(); 
    } else { 
     fragmentManager.beginTransaction().replace(R.id.protokoll_content, f).commit(); 
    } 

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

Я просто пытаюсь загрузить существующую версию фрагмента, вызвав ее своим тегом.

На мой взгляд, приведенный выше код будет выполняться следующим образом:

IF (фрагмент не имеет существующего экземпляра) {создать новую с уникальным тэгом и заменить существующие фрагменты в контейнере с ним}

ИНАЧЕ (фрагмент ДЕЙСТВИТЕЛЬНО есть существующий экземпляр) {нагрузка, что существующие версии вместо создания нового и заменить текущий фрагмент с найденным существующего фрагментом}

Редактировать

Немного обновленный код. Та же проблема, новые фрагменты создаются вместо существующих экземпляров загружаемых фрагментов.

Разъяснение

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

+0

вы отлажена для значения тега ?? –

+0

Возможный дубликат [Android заменить текущий фрагмент другим фрагментом] (http://stackoverflow.com/questions/8163104/android-replace-the-current-fragment-with-another-fragment) –

+1

ваше условие 'if' говорит если фрагмент нулевой, вы загружаете «нулевой фрагмент». что именно вы делаете. ? 'fragmentManager.beginTransaction(). replace (R.id.activity_content, fragment, tag) .commit();' – Bharatesh

ответ

0

Ниже код используется для добавления фрагмента в случае отсутствия фрагмента добавляется макет

FragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
Fragment1 fragment1 = new Fragment1(); 
fragmentTransaction.add(R.id.fragment, fragment1, "fragment1"); 
fragmentTransaction.commit(); 

Приведенный выше код будет добавить Fragment1 к R.id.fragment

Ниже код используется до заменить фрагмент на другой в макете

FragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
Fragment2 fragment2 = new Fragment2(); 
fragmentTransaction.replace(R.id.fragment, fragment2, "fragment2"); 
fragmentTransaction.commit(); 

Приведенный выше код будет заменить фрагмент с другим в макете

+0

Спасибо, но, к сожалению, проблема в том, что я не могу создать/добавить/заменить фрагменты, это то, что я не хочу новых экземпляров старых фрагментов, я хочу загрузить предыдущие экземпляры. Поэтому, когда я редактирую текст в фрагменте, а затем загружаю другой фрагмент, попробуйте вернуться к старому, весь текст стирается, потому что это новый загружаемый фрагмент. –

+0

Сохраните отредактированный текст в sharedpreference перед заменой. Когда вы перезагружаете предыдущий фрагмент, берете vales из sharepref и храните его обратно. Это способ восстановить фрагмент назад к предыдущему виду. –

+0

Ljas Ahamed - но при добавлении в задний стек вы можете просто нажать кнопку «Назад», и весь текст по-прежнему существует, поэтому функция существует, чтобы вернуть ее без использования текста хранилища и воссоздать фрагмент вариант. : P –

Смежные вопросы