我有一个片段和一个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
,而strings
为null
。< / p>
我认为当应用程序保存其状态时会发生这种情况,而不仅仅是当我按下按钮来分割窗口时。
问题是为什么ints
内的值是空值或默认值?我该如何解决它们?
由于
ActivityA中的P.S0
不执行,只在FragmentA中执行savedInstanceState
,我认为这也是一种奇怪的行为。
编辑:我认为问题是onSaveInstanceState
中的onSaveInstanceState
未被调用。但是我不知道为什么没有被召唤。
答案 0 :(得分:0)
onSaveInstanceState
仅在Android系统本身需要销毁活动或片段时调用,例如打电话或记忆力不足。
此外,在调用super.onSaveInstanceState
之前,将您的值放在Bundle 中,之后状态已经保存。