Как говорится в заголовке, я пытаюсь запустить фрагмент из другого фрагмента с помощью кнопки. Это не должно быть слишком сложной задачей, но здесь я борюсь. Когда я нажимаю кнопку для запуска фрагмента, он просто дает мне экран фрагмента по умолчанию, а не тот, который я сделал.
Не на 100% уверен, что делать в настоящее время я
Убедился, что .OnFragmentInteractionListener реализован в моем основном действии для фрагмента.
Попытка загрузить заведомо исправный фрагмент не удалась. Заставляет меня поверить, что я неправильно запускаю фрагмент.
Ошибки не появляются
Обновление: попытка реализовать интерфейс для связи с фрагментом из активности. Реализован интерфейс для активности, но мне нужен метод 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();
}




Я знаю, что это может означать много работы, но вы можете изменить свою реализацию. Из того, что я вижу, вы пытаетесь изменить фрагмент изнутри фрагмента. Если вы спросите меня, это работа 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 есть некоторая информация, когда вы запрашиваете переход фрагмента, которая может помочь понять проблему.
Удачи!
Мне трудно понять, что вы имеете в виду, говоря «это». Пробовал пару вещей и не могу понять. Я предполагаю, что мое приложение не запускается из интерфейса, потому что фрагмент не знает, как взаимодействовать с интерфейсом.