为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

幕布斯7119047 2023-09-20 16:21:51
我正在制作一个导游应用程序,它由一个主要活动和两个片段组成。顶部片段包含城市列表,当您在某个城市打卡时,底部片段会显示该城市的描述。问题是,当我改变方向时,出现错误“尝试在空对象引用上调用虚拟方法 '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]);                }            }
查看完整描述

2 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

为什么不将状态存储在 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);

    }

}


查看完整回答
反对 回复 2023-09-20
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

可以使用您的xml AndroidManifest.xml 中的属性

 android:configChanges="keyboardHidden|orientation"

在这里,它将向应用程序表明您将负责处理轮换,并且不会重新启动您的活动,以便不存在空数据。


查看完整回答
反对 回复 2023-09-20
  • 2 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信