Запуск фрагмента из фрагмента приводит к отображению экрана по умолчанию

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

Не на 100% уверен, что делать в настоящее время я

  1. Убедился, что .OnFragmentInteractionListener реализован в моем основном действии для фрагмента.

  2. Попытка загрузить заведомо исправный фрагмент не удалась. Заставляет меня поверить, что я неправильно запускаю фрагмент.

  3. Ошибки не появляются

Обновление: попытка реализовать интерфейс для связи с фрагментом из активности. Реализован интерфейс для активности, но мне нужен метод fragOut(), вызываемый, когда OnClick запускается из фрагмента. Не уверен, что делать, раньше не работал с интерфейсами.

Update2: Сделал интерфейс и пытаюсь заставить его запустить мой метод, который запускает другой фрагмент. Однако я получаю эту ошибку при попытке вызвать метод

Обновление 3: Сделал здесь интерфейс Использование интерфейса для связи от фрагмента к активности и засунул все необходимое для создания фрагмента внутри вызова метода интерфейса в действии.

FATAL 
    java.lang.NullPointerException: Attempt to invoke interface method
  'void   rangers.socman.BattleRhythmFrag$doubleFrag.fragOut()' on a null
   object reference
    at rangers.socman.BattleRhythmFrag.onClick(BattleRhythmFrag.java:149)

OnClick() из кнопок размещения фрагментов

@Override
public void onClick(View v) {



    switch(v.getId()){



        case R.id.newBattle:
        {
          doubleFrag testFrag;     
          testFrag.fragOut();
           }

        case R.id.editBattle:
        {
            EditBattleFrag editBattleF = new EditBattleFrag();
            getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.home_content,editBattleF,editBattleF.getTag()).addToBackStack(null).commit();

        }

        case R.id.deleteBattle:
        {
            DeleteBattleFrag deleteBattleF = new DeleteBattleFrag();
            getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.home_content,deleteBattleF,deleteBattleF.getTag()).addToBackStack(null).commit();

        }

        break;
        default:
        {

        }
    }
}

Интерфейс, созданный на кнопках хостинга Fragment

   public interface doubleFrag {
         void fragOut(Context context);
   }

Интерфейс реализован на основной деятельности

    @Override
public void fragOut() {

    NewBattleFrag test = new NewBattleFrag();

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

    transaction.replace(R.id.home_content,test);
    transaction.addToBackStack(null);

    transaction.commit();

}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я знаю, что это может означать много работы, но вы можете изменить свою реализацию. Из того, что я вижу, вы пытаетесь изменить фрагмент изнутри фрагмента. Если вы спросите меня, это работа Host Activity по изменению фрагментов (если вы не используете mvp или mvvm).

Это может быть легко достигнуто с помощью интерфейса. Создайте интерфейс внутри вашего фрагмента следующим образом:

public interface myInterface {
    void myMethod();
}

Когда вы создаете свой фрагмент в своей деятельности (ваша активность должна реализовывать ваш интерфейс), передайте «это» в качестве ссылки, чтобы фаргмент знал, что интерфейс должен взаимодействовать с активностью, когда это запрашивается. Таким образом, вы можете фактически позволить Host Activity обрабатывать свой собственный процесс для изменения фрагментов.

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();

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

Удачи!

Мне трудно понять, что вы имеете в виду, говоря «это». Пробовал пару вещей и не могу понять. Я предполагаю, что мое приложение не запускается из интерфейса, потому что фрагмент не знает, как взаимодействовать с интерфейсом.

Rob 17.06.2019 23:15

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