总之,如何在后台堆栈中正确保存片段的实例状态?我在此发现了许多类似问题的例子,但不幸的是,没有一个答案符合我的要求。我有不同的人像和景观布局,我使用的是后堆栈,这两种方式都阻止了我使用。setRetainState()以及使用配置更改例程的技巧。我在TextViews中向用户显示某些信息,这些信息不会保存在默认处理程序中。当仅使用活动编写应用程序时,以下内容运行良好:TextView vstup;@Overridepublic void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.whatever);
vstup = (TextView)findViewById(R.id.whatever);
/* (...) */}@Overridepublic void onSaveInstanceState(Bundle state) {
super.onSaveInstanceState(state);
state.putCharSequence(App.VSTUP, vstup.getText());}@Overridepublic void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);
vstup.setText(state.getCharSequence(App.VSTUP));}带着Fragment这只在非常特殊的情况下起作用。具体来说,最糟糕的是替换一个片段,将它放在后面的堆栈中,然后在显示新片段时旋转屏幕。据我所知,旧片段没有接到呼叫onSaveInstanceState()当被替换,但仍然以某种方式链接到Activity稍后,当它的View已经不存在了,所以找我的TextView将结果转化为NullPointerException.同时,我发现保持对我TextViews不是个好主意FragmentS,即使你不介意Activity那样的话,onSaveInstanceState()实际上保存了状态,但是如果我旋转屏幕,问题就会再次出现。两次当碎片被隐藏时onCreateView()不会在新实例中调用。我想在onDestroyView()变成一些Bundle-类型为类成员元素(实际上是更多的数据,而不仅仅是一个TextView)和储蓄那,那个在……里面onSaveInstanceState()但是还有其他的缺点。主要是,如果碎片是目前显示的是,调用这两个函数的顺序是相反的,因此我需要考虑两种不同的情况。必须有一个更清洁和正确的解决方案!
2 回答
慕村9548890
TA贡献1884条经验 获得超4个赞
Fragment
1.onSaveInstanceState()
onActivityCreated()
:
@Overridepublic void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ... if (savedInstanceState != null) { //Restore the fragment's state here }}...@Overridepublic void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //Save the fragment's state here}
2.onSaveInstanceState()
onCreate()
.
public void onCreate(Bundle savedInstanceState) { ... if (savedInstanceState != null) { //Restore the fragment's instance mContent = getSupportFragmentManager().getFragment(savedInstanceState, "myFragmentName"); ... } ...}@Overrideprotected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //Save the fragment's instance getSupportFragmentManager().putFragment(outState, "myFragmentName", mContent);}
- 2 回答
- 0 关注
- 512 浏览
添加回答
举报
0/150
提交
取消