我正在制作新闻应用程序,我在内部片段中有Gridview,并且在配置更改时我实现了onSaveInstanceState和onRestoreInstanceState .

低于我得到的错误

致命异常:主程序:com.edgar.yodgorbekkomilo.newsapp,PID:5676 java.lang.NullPointerException:尝试在空对象引用上调用虚方法'android.os.Parcelable android.widget.GridView.onSaveInstanceState()' com.edgar.yodgorbekkomilo.newsapp.AllNewsFragmentTab.onCreateView(AllNewsFragmentTab.java:53)在android.support.v4.app.Fragment.performCreateView(Fragment.java:2354)的android.support.v4.app.FragmentManagerImpl.moveToState( FragmentManager.java:1419)在Android.support.v4上有android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1740),位于android.support.v4上的android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1809) .app.BackStackRecord.executeOps(BackStackRecord.java:799)在android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2580)android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2367) )在android.support.v4.app.FragmentManagerImpl.removeRedundantOpera在Android.support的android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:651)的android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:2199)上的tionsAndExecute(FragmentManager.java:2322) .v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:167)位于android.support.v4.view.ViewPager.populate(ViewPager.java:1236)的android.support.v4.view.ViewPager.populate(ViewPager.java) :1084)在android.view.measure.View.measure(View.java:22002)的android.sview.View.measure(View.java: . 6580)在android.sview.View.measure的android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:714)android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:786) .java:22002)在Android.widget.FrameLayout.onMeasure(FrameLayout . )的android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580) . java:185)在android.view.measure.View.measure(View.java:22002)上的android.sview.vs.Widget.ContentChildMaygins(View.java:2200)上的android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)(ViewGroup.java) :6580)android.widget.LinearLayout.measureChildBeforeLayout.Rayout . 在Android.widget.Linear.measureVertical(LinearLayout.java:806)的android.widget.LinearLayout.onMeasure(LinearLayout.java:685) .view.View.measure(View.java:22002)位于android.view.View上的android.view.measureGroup.measureChildMaygins(ViewGroup.java:6580)android.widget.FrameLayout.onMeasure(FrameLayout.java:185) . 在Android.widget.Lineout.measureVertical(LinearLayout.java)的android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)上的android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580)测量(View.java:22002) :806)在android.view上的android.view.View.measure(View.java:22002)的android.widget.LinearLayout.onMeasure(LinearLayout.java:685) . 在android.view.View的com.android.internal.policy.DecorView.onMeasure(DecorView.java:721)的android.widget.FrameLayout.onMeasure(FrameLayout.java:185)上的ViewGroup.measureChildWithMargins(ViewGroup.java:6580) .measure(View.java:22002)在android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2410)的android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1498)android.view.ViewRootImpl.performTraversals(ViewRootImpl . java:1751)在android.view.ViewRootImpl上的android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1386)在Android.view.Choreographer $ TraversRecord.run(Choreographer.java :911)在Android.view.Choreographer(Page 4)上的android.view.Chocographer.doCallbacks(Choreographer.java:723),android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:897)在android.os.Handler.handleCallback(Handler.java:789)03-17 20:12:26.358 5676-5676 / com.edgar.yodgorbekkomilo.newsapp E / AndroidRunti我:在android.o.Handler.dispatchMessage(Handler.java:98)的android.app.Looper.loop(Looper.java:164)在android.app.ActivityThread.main(ActivityThread.java:6541)的java . lang.reflect.Method.invoke(Native Method)atcom.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)和我的Fragment下面,我实现了配置更改

公共类AllNewsFragmentTab扩展Fragment {

public ArrayList<News> articleList;
ArrayList<Article> articleArrayList = new ArrayList<>();
public GridView gridView;
private View parentView;
private ArticleAdapter adapter;
Parcelable state;

// ...

//恢复索引和位置

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.all_news_fragment_tab, container, false);
    gridView = view.findViewById(R.id.listView);
    articleList = new ArrayList<>();

    parentView = view.findViewById(R.id.parentLayout);

    state = gridView.onSaveInstanceState();
    /**
     * Getting List and Setting List Adapter
     *
     *
     */


    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

// Snackbar.make(parentView,articleArrayList.get(position).getStatus()“=>”articleArrayList.get(position).getTotalResults(),Snackbar.LENGTH_LONG) . show(); Intent i = new Intent(getContext(),NewsDetailActivity.class);

i.putExtra("myDataKey", articleArrayList.get(position));
            startActivity(i);

        }
    });

    Toast toast = Toast.makeText(getActivity().getApplicationContext(), R.string.string_click_to_load, Toast.LENGTH_LONG);
    toast.setGravity(Gravity.CENTER, 0, 0);
    toast.show();


    /**
     * Checking Internet Connection
     */
    if (InternetConnection.checkConnection(getActivity().getApplicationContext())) {
        final ProgressDialog dialog;
        /**
         * Progress Dialog for User Interaction
         */
        dialog = new ProgressDialog(getActivity());
        dialog.setTitle(getString(R.string.string_getting_json_title));
        dialog.setMessage(getString(R.string.string_getting_json_message));
        dialog.dismiss();



        //Creating an object of our api interface
        ApiService api = RetroClient.getApiService();

        /**
         * Calling JSON
         */
        Call<News> call = api.getAllNews();

        /**
         * Enqueue Callback will be call when get response...
         */
        call.enqueue(new Callback<News>() {
            @Override
            public void onResponse(Call<News> call, Response<News> response) {
                //Dismiss Dialog
                dialog.dismiss();

                if (response.isSuccessful()) {
                    /**
                     * Got Successfully
                     */
                    // String articleList = String.valueOf(response.body());
                    News news = response.body();


                    articleArrayList.addAll(news.getArticles());


                    /**
                     * Binding that List to Adapter
                     */adapter = new ArticleAdapter(getActivity(), articleArrayList);
                    gridView.setAdapter(adapter);
                    if(state != null) {
                        gridView.onRestoreInstanceState(state);
                    }

                } else {
                    Snackbar.make(parentView, R.string.string_some_thing_wrong, Snackbar.LENGTH_LONG).show();

                }
            }

            @Override
            public void onFailure(Call<News> call, Throwable t) {
                dialog.dismiss();
            }
        });



    } else {
        Snackbar.make(parentView, R.string.string_internet_connection_not_available, Snackbar.LENGTH_LONG).show();

    }
    return view;
}

}

below my all_news_fragment_tab.xml where I have declared my fragment

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <GridView
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />


</RelativeLayout>