我正在查看Android开发人员网站上的一些代码,并对此处的示例显示有一个简短的问题 - http://developer.android.com/guide/components/fragments.html
特别是,我正在看这段代码 -
public static class DetailsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getResources().getConfiguration().orientation
== Configuration.ORIENTATION_LANDSCAPE) {
// If the screen is now in landscape mode, we can show the
// dialog in-line with the list so we don't need this activity.
finish();
return;
}
if (savedInstanceState == null) {
// During initial setup, plug in the details fragment.
DetailsFragment details = new DetailsFragment();
details.setArguments(getIntent().getExtras());
getFragmentManager().beginTransaction().add(android.R.id.content, details).commit();
}
}
第二个if语句的重点是什么 -
if (savedInstanceState == null) {
我找不到任何if语句不正确的情况。我已经通过添加else语句并在其中设置断点来测试此代码。无论我怎么试,我都无法达到那个断点。那么为什么甚至打扰if语句呢?为什么不把它全部放在一起呢?
答案 0 :(得分:1)
在某些情况下,您的活动会被Android操作系统停止。在这些情况下,您可以通过调用[onSaveInstanceState](http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle)来保存活动状态。如果在此之后,您的活动再次启动,则会传递Bundle
您已创建,以便您可以正确恢复状态。
答案 1 :(得分:1)
您必须查看完整的示例代码。这部分是有道理的。
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("curChoice", mCurCheckPosition);
}
如果在第一次启动Activity时Bundle savedInstanceState将为null并且将执行if语句的主体。如果调用onSaveInstanceState,因为您离开了Activity,Bundle不再为null,并且if主体将不会被执行。
答案 2 :(得分:0)
如果你的应用被暂停/杀死等,那么你通过onSaveInstanceState
保存状态
savedInstanceState将包含您保存的应用程序的状态。否则它将为null。
答案 3 :(得分:0)
显然,这已添加到示例中,以便将来扩展此代码。虽然它现在完全没有功能,但如果此活动是为了启动另一个活动并在新活动具有焦点时被杀死,则此代码将在用户点击后退按钮时重建活动,而不是从头开始重建。