2015-04-06 79 views
0

我有一个活动,它在onCreate中为其布局添加了一个片段。由于方向更改而调用onCreate时,片段不为空

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.new_layout); 
    FragmentManager fm = getSupportFragmentManager(); 

    //R.id.fragment_container refers to a framelayout in R.layout.new_layout 
    MyFragment fragment = (MyFragment) fm 
       .findFragmentById(R.id.fragment_container); 
    if (fragment == null) { 
     FragmentTransaction ft = fm.beginTransaction(); 
     ft.add(R.id.fragment_container, new MyFragment()); 
     ft.commit(); 
    } 
} 

第一次创建活动和的onCreate被调用,片段为空,所以一个新的MyFragment加到R.id.fragment_container。我期待在方向更改后调用onCreate时的相同场景,但在这种情况下,片段的确不是null。我实际上想知道方位变化时确切发生的情况。

回答

0

当方向改变时,整个屏幕刷新。 Android重新启动整个运行Activity。发生这种情况时,调用onDestroy(),然后调用onCreate()。你可以通过做几件事情来照顾方位的变化。处理这种重启的一种方法是利用onSaveInstanceState()。另一种(更容易)处理此问题的方法是一起禁用方向更改。您可以进入AndroidManifest文件并在活动部分下添加android:screenOrientation="portrait"android:screenOrientation="landscape"

Handling Runtime Changes in Android

相关问题