У меня есть MainActivity, в которой есть viewpager, содержащий фрагменты хоста (которые могут содержать другие фрагменты с помощью дочернего менеджера фрагментов).То, чего я пытаюсь добиться, - это запустить фрагмент диалога из одного из дочерних фрагментов при щелчке по уведомлению.Я использую FCM, и уведомление идет с намерением, но когда я пытаюсь добавить дочерний фрагмент, я получаю Фрагмент, не привязанный к действию , в то время как я пытаюсь получить менеджер дочерних фрагментов.
@Override
protected void onCreate(Bundle savedInstanceState) {
addFrags();//adding fragments to the viewpager
Bundle bundle = getIntent().getExtras();
if (bundle.containsKey(ARG_ACTION_ID)) {
mAction = (Action) bundle.getSerializable(ARG_ACTION_ID);
}
}
@Override
protected void onStart() {
super.onStart();
switch (mAction) {
case EDIT_TFR: {
mViewPager.setCurrentItem(2);//this much is happening, it will go to the 3rd page of viewpager if i didnt do the rest.
onFragmentInteraction(id);
break;
}
}
}
// this is an interface i use to interact with the acticity from my child fragment, which is also the one i am calling from onstart
@Override
public void onFragmentInteraction(String id) {
HostFragment hostFragment = (HostFragment) mPagerAdapter.getItem(2);
Fragment contentfragment = NewFrag.newInstance(id);
hostFragment.addFragment(contentFragment, true);
}
Это метод addFragent внутри HostFragment
public void addFragment(Fragment fragment, boolean addToBackstack) {
FragmentManager fm = this.getChildFragmentManager(); //this is were i am getting the error
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.add(id.hosted_fragment, fragment);
if (addToBackstack) {
fragmentTransaction.addToBackStack((String)null);
}
fragmentTransaction.commit();
fm.executePendingTransactions();
}
Я планировал планировать вызов публичного метода внутри NewFrag, который откроет диалоговое окно.
Я знаю, что фрагмент может быть не прикреплен к этому времени.Пожалуйста, дайте мне знать, как мне этого добиться.