savedInstanceState内的值为空值或默认值

时间:2016-09-30 23:04:40

标签: java android bundle android-savedstate

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

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执行时,我的代码的执行是关注:调用onSaveInstanceState的{​​{1}},然后调用FragmentA的{​​{1}}并输入

部分
onCreate

问题是ActivityA的值是默认值,例如,if (savedInstanceState != null){ int test = savedInstanceState.getInt("intTest"); String strTest = savedInstanceState.getString("stringTest"); } savedInstanceState,而stringsnull。< / p>

我认为当应用程序保存其状态时会发生这种情况,而不仅仅是当我按下按钮来分割窗口时。

问题是为什么ints内的值是空值或默认值?我该如何解决它们?

由于

ActivityA中的P.S 0不执行,只在FragmentA中执行savedInstanceState,我认为这也是一种奇怪的行为。

编辑:我认为问题是onSaveInstanceState中的onSaveInstanceState未被调用。但是我不知道为什么没有被召唤。

1 个答案:

答案 0 :(得分:0)

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

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