我有一个片段和一个活动,活动代码如下所示:
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
:FragmentA
被调用然后onCreate
ofActivityA
被调用并进入部分
if (savedInstanceState != null){
int test = savedInstanceState.getInt("intTest");
String strTest = savedInstanceState.getString("stringTest");
}
问题是savedInstanceState
默认值是空值,例如 for strings
arenull
和 for ints
are 0
。
我认为这种行为发生在应用程序保存其状态时,而不仅仅是当我按下按钮拆分窗口时。
问题是为什么里面的值savedInstanceState
是空值或默认值?我该如何修复它们?
谢谢
ActivityA中的PSonSaveInstanceState
不执行,只onSaveInstanceState
在FragmentA中执行,我觉得这也是一种奇怪的行为。
编辑:我认为问题在于onSaveInstanceState
未FragmentA
调用。但我不知道为什么不调用它。