There is a Fragment containing a button, on clicking on which the DialogFragment is DialogFragment . It in turn contains two fragments and you need to implement a ViewPager that allows you to flip these two fragments in a dialog. After pressing the button, an error is returned in debug mode

 java.lang.IllegalStateException: Fragment does not have a view 

Full stack trace:

 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: FATAL EXCEPTION: main 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: Process: com.rmr.ngusarov.criminalintent, PID: 12467 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: java.lang.IllegalStateException: Fragment does not have a view 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.app.Fragment$1.onFindViewById(Fragment.java:2181) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:963) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.app.BackStackRecord.run(BackStackRecord.java:793) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:562) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.support.v13.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:149) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.support.v4.view.ViewPager.populate(ViewPager.java:1177) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.support.v4.view.ViewPager.populate(ViewPager.java:1025) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1545) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.View.measure(View.java:18788) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.View.measure(View.java:18788) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.View.measure(View.java:18788) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.View.measure(View.java:18788) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.View.measure(View.java:18788) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.View.measure(View.java:18788) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.View.measure(View.java:18788) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1191) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.Choreographer.doCallbacks(Choreographer.java:670) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.Choreographer.doFrame(Choreographer.java:606) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.os.Looper.loop(Looper.java:148) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 03-29 22:56:31.469 12467-12467/com.rmr.ngusarov.criminalintent E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Actually classes themselves 1) DialogFragment

 package com.rmr.ngusarov.criminalintent; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.app.Fragment; import android.app.FragmentManager; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.v13.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.util.Log; import java.util.Calendar; import java.util.Date; public class DateAndTimePickerDialogFragment extends DialogFragment { public static final String EXTRA_DATE = "com.rmr.ngusarov.criminalintent.date"; public static final int NUM_ITEMS = 2; private ViewPager mViewPageFragment; private Date mDate; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { mDate = (Date) getArguments().getSerializable(EXTRA_DATE); mViewPageFragment = new ViewPager(getActivity()); mViewPageFragment.setId(R.id.viewPagerInFragment); FragmentManager fm = getChildFragmentManager(); mViewPageFragment.setAdapter(new MyDateManager(fm)); return new AlertDialog.Builder(getActivity()) .setView(mViewPageFragment) .setTitle(R.string.date_picker_title) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { sendResult(Activity.RESULT_OK); } }) .create(); } private void sendResult(int resultCode) { if (getTargetFragment() == null) return; Intent i = new Intent(); i.putExtra(EXTRA_DATE, mDate); getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, i); } public static DateAndTimePickerDialogFragment newInstance(Date date) { Bundle args = new Bundle(); args.putSerializable(EXTRA_DATE, date); DateAndTimePickerDialogFragment fragment = new DateAndTimePickerDialogFragment(); fragment.setArguments(args); return fragment; } class MyDateManager extends FragmentPagerAdapter { public MyDateManager(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { Calendar calendar = Calendar.getInstance(); calendar.setTime(mDate); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day = calendar.get(Calendar.DAY_OF_MONTH); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); Log.d(CrimeListFragment.TAG, "get item num = " + position); switch (position) { case 0: return DatePickFragment.newInstance(year, month, day); case 1: return TimePickFragment.newInstance(hour, minute); default: return null; } } @Override public int getCount() { return NUM_ITEMS; } } } 

2) Fragment contained in a DialogFragment

 package com.rmr.ngusarov.criminalintent; import android.app.Fragment; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.DatePicker; import java.util.Date; import java.util.GregorianCalendar; public class DatePickFragment extends Fragment{ public static final String DATE_YEAR_KEY = "date_year"; public static final String DATE_MONTH_KEY = "date_month"; public static final String DATE_DAY_KEY = "date_day"; private int year; private int month; private int day; private Date mDate; public View datePick; public DatePicker mDatePicker; public static DatePickFragment newInstance(int year, int month, int day) { DatePickFragment datePickFragment = new DatePickFragment(); Bundle args = new Bundle(); args.putInt(DATE_YEAR_KEY, year); args.putInt(DATE_MONTH_KEY, month); args.putInt(DATE_DAY_KEY, day); datePickFragment.setArguments(args); Log.d(CrimeListFragment.TAG, "new instance for new DP = OK!"); return datePickFragment; } @Override public void onCreate(Bundle savedInstanceState) { Log.d(CrimeListFragment.TAG, "onCreate start DP = OK!"); super.onCreate(savedInstanceState); year = getArguments().getInt(DATE_YEAR_KEY); month = getArguments().getInt(DATE_MONTH_KEY); day = getArguments().getInt(DATE_DAY_KEY); Log.d(CrimeListFragment.TAG, "onCreate DP = OK! day = " + day); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.d(CrimeListFragment.TAG, "before init view DP = OK!"); mDatePicker = (DatePicker) datePick.findViewById(R.id.dialog_date_datePiker); datePick = inflater.inflate(R.layout.dialog_date, null); Log.d(CrimeListFragment.TAG, "after init view DP = OK!"); Log.d(CrimeListFragment.TAG, "before init DP = OK!"); mDatePicker.init(year, month, day, new DatePicker.OnDateChangedListener() { @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { mDate = new GregorianCalendar(year, monthOfYear, dayOfMonth).getTime(); getArguments().putSerializable(DateAndTimePickerDialogFragment.EXTRA_DATE, mDate); } }); Log.d(CrimeListFragment.TAG, "after init DP = OK!"); return datePick; } } 

3) The class of the second fragment is similar to the previous one; I see no reason to spread it.

Tell me, please, what could be the problem or what information should be added to increase the likelihood of help?

    2 answers 2

    Swap lines with:

     mDatePicker = (DatePicker)datePick.findViewById(R.id.dialog_date_datePiker); datePick = inflater.inflate(R.layout.dialog_date, null); 

    on :

     datePick = inflater.inflate(R.layout.dialog_date, null); mDatePicker = (DatePicker)datePick.findViewById(R.id.dialog_date_datePiker); 
    • Yes, I have already reversed these calls, and in my example that I posted the wrong sequence. I tried including getActivity (). getLayoutInflater (). But this is not the reason - the spectra has not changed, that is, until this point the implementation does not reach, apparently - abbath0767

    Here, the trouble is that when a child FragmentManager is created, it is imperative that the parent fragment has a view. And since onCreateDialog uses onCreateDialog , it does not create any view in onCreateView , and as a result it turns out the problem.

    I see two solutions here: you can either create a dialog via onCreateView , or implement a PagerAdapter manually and not use fragments inside the dialog. Personally, the second option seems more preferable to me, because the first one will have to do all the buttons and styles by yourself, which is quite difficult.