为什么 saveStateInstance 在屏幕方向上不起作用?

我正在制作一个导游应用程序,它由一个主要活动和两个片段组成。顶部片段包含城市列表,当您在某个城市打卡时,底部片段会显示该城市的描述。问题是,当我改变方向时,出现错误“尝试在空对象引用上调用虚拟方法 'void android.widget.TextView.setText(java.lang.CharSequence)'”


这是城市列表片段:


        package com.example.tourguide;



        import android.os.Bundle;

        import android.support.annotation.NonNull;

        import android.support.v4.app.Fragment;

        import android.view.LayoutInflater;

        import android.view.View;

        import android.view.ViewGroup;

        import android.widget.AdapterView;

        import android.widget.ArrayAdapter;

        import android.widget.ListView;



        /**

         * A simple {@link Fragment} subclass.

         */

        public class CityFragment extends Fragment {


            View view;

            String[] cities;

            String[] descriptions;

            ListView listView;

            DescriptionFragment text;

            int mPosition;


            public CityFragment() {

                // Required empty public constructor

            }



            @Override

            public View onCreateView(LayoutInflater inflater, ViewGroup container,

                                     Bundle savedInstanceState) {

                super.onCreate(savedInstanceState);

                // Check whether we're recreating a previously destroyed instance

                if (savedInstanceState != null) {

                    // Restore value of member from saved state

                    text = (DescriptionFragment) getFragmentManager().getFragment(savedInstanceState, getString(R.string.DESCRIPTION_FRAG));

                    mPosition = savedInstanceState.getInt(getString(R.string.POSITION));

                    cities = savedInstanceState.getStringArray(getString(R.string.CITY_ARRAY));

                    descriptions = savedInstanceState.getStringArray(getString(R.string.DESCRIPTION_ARRAY));

                    text.change(descriptions[mPosition], cities[mPosition]);

                }



            }

幕布斯7119047
浏览 92回答 2
2回答

鸿蒙传说

为什么不将状态存储在 DescriptionFragment 中。/** * A simple {@link Fragment} subclass. */public class DescriptionFragment extends Fragment {    private static final String DESCRIPTION = "DESCRIPTION";    private static final String CITY = "CITY";    TextView cityName;    TextView text;    public DescriptionFragment() {        // Required empty public constructor    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,            Bundle savedInstanceState) {        // Inflate the layout for this fragment        return inflater.inflate(R.layout.fragment_description, container, false);    }    @Override    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {        text = view.findViewById(R.id.city_description);        cityName = view.findViewById(R.id.city_name);        if (savedInstanceState != null) {            String description = savedInstanceState.getString(DESCRIPTION);            String city = savedInstanceState.getString(CITY);            change(description, city);        }    }    @Override    public void onSaveInstanceState(@NonNull Bundle outState) {        super.onSaveInstanceState(outState);        // Save the fragments Instance        outState.putString(DESCRIPTION, text.getText().toString());        outState.putString(CITY, cityName.getText().toString());    }    public void change(String description, String city) {        text.setText(description);        cityName.setText(city);    }}

汪汪一只猫

可以使用您的xml AndroidManifest.xml 中的属性 android:configChanges="keyboardHidden|orientation"在这里,它将向应用程序表明您将负责处理轮换,并且不会重新启动您的活动,以便不存在空数据。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java