0

I have a fragment which is loaded in a ViewPager:

public class mFragment extends Fragment {

    public ArrayList<String> mArrayList;

    @Override
    public void onSaveInstanceState(Bundle outState) {
        outState.putStringArrayList("KEY", mArrayList);
        super.onSaveInstanceState(outState);
    }

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

        if (savedInstanceState != null) {
            mArrayList = savedInstanceState.getStringArrayList("KEY");
        } else {
            mArrayList = new ArrayList<>();
        }

        ...
    }

}

and inside onCreate() method of my activity class:

mButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        mFragment currentFragment = (mFragment) mFragmentPagerAdapter.getItem(mViewPager.getCurrentItem());
        currentFragment.mArrayList.clear();
    }
});

I could clear the ArrayList by clicking on mButton, but after changing the screen orientation I got the following error:

06-14 17:35:08.274    1995-1995/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: a.wallpaper, PID: 1995
    java.lang.NullPointerException: Attempt to invoke virtual method 'void java.util.ArrayList.clear()' on a null object reference
            at a.wallpaper.MainActivity$6.onClick(MainActivity.java:123)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
  • be sure about two things : 1) onCreateView code is called after rotation 2 __savedInstanceState.getStringArrayList("KEY")__ is not null. Is it correct? – Nik Myers Jun 14 '15 at 13:10
  • @NikMyers I have already checked them, they are OK –  Jun 14 '15 at 13:11

1 Answers1

0

Based on this answer, after overriding instantiateItem() method inside mFragmentPagerAdapter class, the error went away:

@Override
public Object instantiateItem(ViewGroup container, int position) {
    GalleryFragment fragment = (GalleryFragment) super.instantiateItem(container, position);
    fragments[position] = fragment;
    return fragment;
}
Community
  • 1
  • 1