2013-08-21 4 views
0

У меня есть два фрагмента, мне нужно держать их обоих, но показывать и скрывать нажатие кнопок.findFragmentByTag всегда возвращает null при попытке получить после добавления()

Я добавил первый фрагмент с помощью:

FragmentTransaction transaction = getSupportFragmentManager() 
    .beginTransaction(); 
    mDishFragment = new DishFragment(); 
    transaction.add(R.id.dish_fragment, mDishFragment, "DishFragment"); 
    transaction.commit(); 

Первый фрагмент (DishFragment) имеет кнопку на мыши из которых код проверяет, если «OrderSummaryFragment» существует (с использованием findFragmentbyTag), если он делает, он должен показать() он еще добавляет() новый. вот код:

FragmentTransaction transaction = getSupportFragmentManager() 
      .beginTransaction(); 
    if (getFragmentManager().findFragmentByTag("OrderSummaryFragment") == null) { 
     System.out.println("OrderSummaryFragment not found"); 
     transaction.add(R.id.dish_fragment, mOrderSummaryFragment,"OrderSummaryFragment"); 
     System.out.println("Orderfragment added"); 
     transaction.addToBackStack(null); 
     transaction.commit(); 
    }else{ 
     System.out.println("OrderSummaryFragment found"); 
     transaction.hide(mDishFragment); 
     transaction.show(mOrderSummaryFragment); 
     transaction.commit(); 
    } 

Впервые с тех пор «OrderSummaryFragment» не существует, код добавляет один и отображается. На кнопке «OrderSummaryFragment» есть кнопка «Назад», в которой показано() вверх по первому фрагменту «DishFragment». Во второй раз, поскольку мы уже добавили «Ordersummaryfragment» ранее, findFragmentByTag должен возвращать OrderSummaryFragment, но вместо этого он возвращает null.

Примечание: Я не использую функцию replace(), поэтому я хочу повторно использовать оба этих фрагмента.

Надеюсь, кто-то может мне помочь.

+0

Чтобы вернуться к первому фрагменту, вы должны использовать PopBackStack? –

+0

Что такое R.id.dish_fragment? ;;;;;;; См. Мой родственный вопрос: http://stackoverflow.com/questions/24833912/refresh-fragment-ui-from-fragmentactivity –

ответ

1

Ваш фрагмент должен искать ваши фрагменты, используя getSupportFragmentManager() вместо метода getFragmentManager() в вашей структуре if.

BTW, Что это за объект R.id.dish_fragment? Фрагмент? Контейнер? Это должен быть контейнер LinearLayout.

+0

Спасибо, приятель, не верю, что я пропустил это :) и да, R.id.dish_fragment - это контейнер для фрагмента. – user2702768

+0

См. Мой родственный вопрос: http://stackoverflow.com/questions/24833912/refresh-fragment-ui-from-fragmentactivity –

+0

Что делать, если я использую ChildFragmentManager? Тогда ваш ответ неприменим ... –

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