ViewPager in DialogFragment, IllegalStateException: The fragment does not have a view

EDIT3: it seems that only API17 and above will have the ViewPager working correctly with the ChildFragmentManager .........

I am trying to add ViewPagerto my dialog:

public class FirstLaunchDialogFragment extends DialogFragment {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NORMAL, R.style.Theme_Sherlock_Light_Dialog);
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    final View v = getActivity().getLayoutInflater().inflate(
            R.layout.fragment_dialog_first_launch, null);
    ViewPager viewPager = (ViewPager) v.findViewById(R.id.pager);

    viewPager.setAdapter(new FirstLaunchFragmentsAdapter(getChildFragmentManager()));

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setView(v).setInverseBackgroundForced(true);
    return builder.create();
}
}

and for some reason he crashed, saying:

04-06 00:00:49.600: E/AndroidRuntime(3734): java.lang.IllegalStateException: Fragment does not have a view
04-06 00:00:49.600: E/AndroidRuntime(3734):     at android.support.v4.app.Fragment$1.findViewById(Fragment.java:1425)
04-06 00:00:49.600: E/AndroidRuntime(3734):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:901)
04-06 00:00:49.600: E/AndroidRuntime(3734):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
04-06 00:00:49.600: E/AndroidRuntime(3734):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
04-06 00:00:49.600: E/AndroidRuntime(3734):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
04-06 00:00:49.600: E/AndroidRuntime(3734):     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
.....

I searched for searches for Fragment does not have a viewa half day exception with no result

It seems to me that the adapter could not inflate the layout or something else ...

Here is my fragment and adapter

public static class UserWelcomeFragment extends Fragment {

    public static UserWelcomeFragment newInstance() {
        return new UserWelcomeFragment();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_welcome_user, container, false);

        return v;
    }

}

private class FirstLaunchFragmentsAdapter extends FragmentPagerAdapter {

    public FirstLaunchFragmentsAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int arg0) {
        switch (arg0) {
        case 0:
            return UserWelcomeFragment.newInstance();

        case 1:
            return new IntegrationSelectingDialogFragment();

        default:
            return UserWelcomeFragment.newInstance();
        }

    }

    @Override
    public int getCount() {
        return 2;
    }

}

EDIT: https://code.google.com/p/android/issues/detail?id=42601 looks related

EDIT2: I am testing API 16, and the project uses v4 support library version 12

+5
source share
3 answers

Android ? ViewPagers , ViewPager , . API 17 (Jellybean), Android 4.1 +.

+1

, setContentView(). , , , onResume() - ( ).

,

android:configChanges="keyboardHidden|orientation"

savedInstanceState/Bundle onResume ( , , .

- , , , /.

: / :

+1

Make sure u returns rootView in the onCreateView () method.

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    rootView = inflater.inflate(R.layout.fragment_layout, container, false);

    getChildFragmentManager().beginTransaction().add(R.id.fragment_container, MyFragment.getInstance() ).commit();

    return rootView;
}

Otherwise, the android will look for the container fragment in the XML activity.

0
source

All Articles