0

我有一个片段和一个活动,活动代码如下所示:

public class ActivityA extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {


    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("intTest", 10);
        outState.putString("stringTest", "hello");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_admin);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        if (savedInstanceState != null){

            int test = savedInstanceState.getInt("intTest");
            String strTest = savedInstanceState.getString("stringTest");
        }
    }
}

片段看起来像这样:

public class FragmentA extends Fragment {
    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    outState.putInt("intTest", 10);
        outState.putString("stringTest", "hello");

    }

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

        if (savedInstanceState != null){
        int test = savedInstanceState.getInt("intTest");
                String strTest = savedInstanceState.getString("stringTest");
    }

        return rootView;
    }
}

(简化代码以便更好地理解)

好的,在我的智能手机中,我有 android 7,我可以将窗口分成 2 个以显示 2 个不同的应用程序,所以当我按下这个按钮并且我的 ActivityA 和我的 FragmentA 正在执行时,我的代码的执行如下onSaveInstanceStateFragmentA被调用然后onCreateofActivityA被调用并进入部分

if (savedInstanceState != null){

                int test = savedInstanceState.getInt("intTest");
                String strTest = savedInstanceState.getString("stringTest");
            }

问题是savedInstanceState默认值是空值,例如 for stringsarenull和 for intsare 0

我认为这种行为发生在应用程序保存其状态时,而不仅仅是当我按下按钮拆分窗口时。

问题是为什么里面的值savedInstanceState是空值或默认值?我该如何修复它们?

谢谢

ActivityA中的PSonSaveInstanceState不执行,只onSaveInstanceState在FragmentA中执行,我觉得这也是一种奇怪的行为。

编辑:我认为问题在于onSaveInstanceStateFragmentA调用。但我不知道为什么不调用它。

4

1 回答 1

0

onSaveInstanceState仅在Android系统本身需要销毁活动或片段时调用,例如电话或内存不足。

此外,在call之前将您的值放入 Bundle中super.onSaveInstanceState,之后状态已经保存。

于 2016-10-01T01:24:49.577 回答