2016-09-30 202 views
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,我的代码的执行情况如下:中FragmentAonSaveInstanceState被称为然后的ActivityAonCreate被调用,在

if (savedInstanceState != null){ 

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

问题的部分输入是该值savedInstanceState是空ø默认情况下,例如,用于stringsnullints0

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

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

感谢

P.S onSaveInstanceState在ActivityA不执行,只是在FragmentA执行onSaveInstanceState,我想这也是一个奇怪的行为。

编辑:我认为问题是,在FragmentAonSaveInstanceState不叫。但我不知道为什么它不被称为。

+0

如果您可以验证哪些方法正在调用将有所帮助。附加调试器并使用一些简单的登录到调试控制台而不暂停应用程序的断点。 – Karakuri

+0

我在问题中说过,调用的方法是FragmentA中的onSaveInstance,然后是ActivityA上的OnCreate。或者您是指完整的执行流程? – RdlP

回答

0

onSaveInstanceState当Android系统本身需要破坏的活性或片段,例如仅称为电话或低内存。

此外,把你的价值在捆绑之前调用super.onSaveInstanceState,之后,该状态已被保存。

+0

我已经看到很多问题,这里在stackoverflow,许多例子和'super.onSaveInstanceState'必须调用之前添加您的自定义值的保存实例,但我已经尝试在开始和结束时,结果是相同 – RdlP