У меня есть действие, в котором я хочу заменить фрагмент. Код, который я использую, приведен ниже:
ResultFragment resultFragment = new ResultFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.fl_act_events_view_container, resultFragment, "ResultFragment")
.commit();
fragmentManager.executePendingTransactions();
resultFragment.updateUI(result);
Я выполняю этот код в методе Activity класса OnCreate ().
Метод updateUI () просто обновляет значения всех элементов фрагмента результата на основе строки «result». Проблема, с которой я сталкиваюсь, заключается в том, что при вызове updateUI () все элементы являются нулевыми.
Например, ResultFragment имеет имя TextView. Когда я делаю:
name.setText(result.getName());
Я получаю исключение NullPointerException, так как имя равно null. Аналогично для всех других элементов пользовательского интерфейса ResultFragment.
Я не могу понять, в чем проблема? Я пробовал несколько методов, но ничего не работает. Мол, я тоже сделал следующее:
Fragment fragment = getSupportFragmentManager().findFragmentByTag("ResultFragment");
if(fragment instanceof ResultFragment){
resultFragment = (ResultFragment) fragment;
resultFragment.updateUI(result);
}
но та же проблема сохраняется.
Тогда я попробовал:
ResultFragment resultFragment = new ResultFragment();
replaceFragment(resultFragment);
ResultFragment.updateUI(result);
public void replaceFragment(Fragment fragment) {
if(fragment==null) return;
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fl_act_events_view_container, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commitAllowingStateLoss();
}
но ничего не работает. Кто-нибудь, пожалуйста, объясните, как я могу вызывать метод updateUI после замены фрагмента в упражнении