Nano Hash - криптовалюты, майнинг, программирование

findFragmentByTag всегда возвращает значение null при попытке извлечения после add()

У меня есть два фрагмента, мне нужно сохранить их оба, но показывать и скрывать при нажатии кнопки.

Я добавил первый фрагмент, используя:

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(), потому что хочу повторно использовать оба этих фрагмента.

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


  • Чтобы вернуться к первому фрагменту, вы должны использовать PopBackStack ? 21.08.2013
  • Что такое R.id.dish_fragment? ;;;;;;;Пожалуйста, посмотрите мой связанный с этим вопрос: stackoverflow.com/questions/24833912/ 19.07.2014

Ответы:


1

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

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

21.08.2013
  • Спасибо, приятель, не могу поверить, что пропустил это :) и да, R.id.dish_fragment — это контейнер для фрагмента. 21.08.2013
  • См. мой связанный вопрос: stackoverflow.com/questions/24833912 / 19.07.2014
  • Оба метода возвращают FragmentManager, так что это должно быть одно и то же. 30.08.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..