В моем существующем приложении у меня есть действие, использующее getFragmentManager () при создании ParentDialogFragment, и там я создаю вложенный фрагмент Dateselect_NestedDialogFragment, используя getChildFragmentManager.
Приложение работало, но начиная с Android 8.0 -> начало падать.Лучшее, что я нашел: «Почему Android O не работает с« не относится к этому FragmentManager! » и « getParentFragment возвращает ноль », но я все еще не понимаю, каквезде используйте один и тот же фрагмент-менеджер (и какой!), как Мне нужно отправить данные обратно из вложенного DialogFragment в ParenDialogtFragment . Где эти изменения в моем коде должны быть сделаны? Или кто-нибудь знает какую-либо ссылку на Oreo-работающий образец-проект, куда данные отправляются обратно из вложенного в родительский фрагмент диалога? Спасибо за любой совет =)
CODE snap:
---------------------------------------------------
In MainActivity I create 1st level DialogFragment:
FragmentManager fm = getFragmentManager();
ParentDialogFragment dialogFragment = ParentDialogFragment.newInstance(-1);
dialogFragment.show(fm, "NEW...");
-----------------------------------------------
In ParentDialogFragment I create 2nd level DialogFragment:
ft = getChildFragmentManager().beginTransaction();
//ft=getActivity().getFragmentManager().beginTransaction(); TRIED E.G. THIS TOO...
ft.addToBackStack(null);
newFragment = Dateselect_NestedDialogFragment.newInstance("klikattu_pvm");
newFragment.setTargetFragment(this, DIALOG_FRAGMENT_DATESELECT);
newFragment.show(ft, "dateselect_dialog");
...
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
switch(requestCode)
{
case DIALOG_FRAGMENT_DATESELECT:
if (resultCode == Activity.RESULT_OK)
{
if (data.getStringExtra("klikattu_pvm")!=null)
{
muokattavaHavainto.sHav_pvm = data.getStringExtra("klikattu_pvm");
blaablaa
}
}
break;
}
}
----------------------------------------
In Dateselect_NestedDialogFragment:
cal.setOnDateChangeListener(new CalendarView.OnDateChangeListener()
{
public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth)
{
if (cal.getDate() != date)
{
Intent intent = new Intent(getParentFragment().getActivity(), ParentDialogFragment.class);
SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");
String sPvm = df.format(cal.getDate());
String sPrefname = getArguments().getString("dateprefname");
intent.putExtra(sPrefname, sPvm);
getParentFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, intent);
dismiss();
}
}
});
--------------------------------------------
При попытке открыть Dateselect_NestedDialogFragment -> причины java.lang.IllegalStateException: Fragment Dateselect_NestedDialogFragment {5d534# 0 dateselect_dialog} объявленный целевой фрагмент ParentDialogFragment ..., который не принадлежит этому FragmentManager!
Изменение на ft = getActivity (). GetFragmentManager (). BeginTransaction (); в ParentDialogFragment -> reason 'java.lang.NullPointerException: попытка вызватьвиртуальный метод 'android.app.Activity android.app.Fragment.getActivity ()' для нулевой ссылки на объект ' в Dateselect_NestedDialogFragment после выбора даты в getParentFragment (). getActivity ()