повторно добавить любой контейнер фрагмента несколько раз

Однажды я задал один вопрос, например: Использование фрагмента более одного раза с новыми значениями с поддержкой обратного стека

Моя проблема была найдена ... но старый фрагмент обновляется (загружается) ... что не требуется (поскольку он содержит пейджинг). Я знаю причину обновления старого фрагмента, т. е. я использовал FragmentTransaction.replace в методе goToFragmentWithBackStack. Если я буду использовать FragmentTransaction.add в методе goToFragmentWithBackStack, он больше не будет работать, и новые данные будет обновлен в старом фрагменте.

Что-то вроде этого: A (старые данные) -> B-> A (новые данные) [КАК Я ХОЧУ .. ОЖИДАЕМЫЙ РЕЗУЛЬТАТ], но показывает, использовал ли я FragmentTransaction.replace в goToFragmentWithBackStack: A(старые данные с загрузкой/обновлением)->B->A(новые данные с загрузкой/обновлением)

Если бы я использовал FragmentTransaction.add в методе goToFragmentWithBackStack: A(старые данные)->B->ничего...

Если я проверю, что нажата кнопка Backstack, она показывает что-то вроде:

Если бы я использовал FragmentTransaction.replace в методе goToFragmentWithBackStack: A(старые данные с загрузкой/обновлением)‹-B‹-A(новые данные с загрузкой/обновлением)(ХОЧУ ПЕРЕСТАНЬТЕ ОБНОВЛЯТЬ СТАРЫЙ ФРАГМЕНТ)

Если бы я использовал FragmentTransaction.add в методе goToFragmentWithBackStack: A (с новыми данными и старым фрагментом)‹-B‹-A(пустое ничего) (поскольку старый фрагмент A уже в контейнере, поэтому новые данные устанавливаются в старом фрагменте)

ЗАКЛЮЧЕНИЕ. Моя основная проблема заключается в том, что я хочу прекратить обновление данных в старом фрагменте A при обратном нажатии. С FragmentTransaction.add в методе goToFragmentWithBackStack он не работает...

Вот мой код:

public static void goToFragmentWithBackStack(Fragment fragment) {
    Fragment tmp = fm.findFragmentByTag(fragment.getClass().getName());
    if (tmp != null && tmp.isVisible())
        return;

    ft = fm.beginTransaction();

    ft.replace(R.id.content_frame, fragment, fragment.getClass().getName());
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.addToBackStack(null);
    ft.commit();
    currentTag = fragment.getClass().getName();
}

вызывающий фрагмент:

  LeftAndRightActivity.goToFragmentWithBackStack(new ExploreFragment(theWord,"#"));

Исследовательский фрагмент:

public ExploreFragment(String data,String pattern) {
this.str_data = data;   
this.str_pattern = pattern;
}

Теперь поток приложения выглядит примерно так: я перехожу от ExploreFragment(1) к PostDetailFragment, а затем снова к ExploreFragment(2) с новыми данными.. (отлично работает)

Теперь, когда я вернулся обратно, нажав кнопку «Назад» на устройстве, старый ExploreFragment (1) снова загружается... Я не хочу обновлять данные ExploreFragment (1), он должен быть только что возобновлен, а не обновлен... Я надеюсь ты понимаешь мою проблему..

Пожалуйста, помогите мне .. Заранее спасибо ..


person userAndroid    schedule 11.12.2014    source источник
comment
добавьте некоторый код функции FragmentTranscation.replace.... В идеале я буду передавать данные в новый фрагмент в качестве аргумента во время создания, и вы можете получить это во фрагменте, используя метод getArgument()   -  person droid kid    schedule 11.12.2014
comment
привет, я добавил тот же код, что и в ссылке ..   -  person userAndroid    schedule 11.12.2014
comment
Я думаю, вы не понимаете мою точку зрения. Я успешно добавил все эти функции с помощью метода замены. Я хочу просто добавить один и тот же фрагмент более одного раза вместо замены   -  person userAndroid    schedule 11.12.2014
comment
да .. вы можете добавить один и тот же фрагмент n раз с другим экземпляром, используя метод замены   -  person droid kid    schedule 11.12.2014
comment
вставьте код, который вы используете   -  person droid kid    schedule 11.12.2014
comment
Я не хочу использовать метод fragmenttransaction.replace... Я хочу использовать метод fragmenttransaction.add... Поскольку использование метода replace обновляет фрагмент каждый раз... Я не хочу обновлять фрагмент... что может быть сделано с использованием метода добавления ... но когда я использую метод добавления ... я сталкиваюсь с некоторыми проблемами, которые я упомянул в своем вопросе ...   -  person userAndroid    schedule 11.12.2014
comment
друг, все, что вы написали, сбивает с толку, и я не хочу тратить свое время на чтение этого. так как я попросил код, который вы использовали для перехода к фрагменту. Также ссылка, которую вы дали, не имеет рабочего кода. Лучше перефразируйте вопрос   -  person droid kid    schedule 11.12.2014


Ответы (1)


В вашем методе goToFragmentWithBackStack() вы используете имя класса в качестве тега. Таким образом, FragmentA всегда должен иметь один и тот же тег, даже если вы создаете новый экземпляр. Поэтому присвойте Fragment уникальный тег и проверьте, сохраняются ли значения.

or

вы удаляете условие if() и всегда создаете новый экземпляр фрагмента

public static void goToFragmentWithBackStack(Fragment fragment) {            
    ft = fm.beginTransaction();

    ft.add(R.id.content_frame, fragment, fragment.getClass().getName());
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.addToBackStack(null);
    ft.commit();
    currentTag = fragment.getClass().getName();
}

Я не пробовал этот код, поэтому проверьте это.

person droid kid    schedule 11.12.2014