2013-05-08 81 views
2

假设我的应用程序包含两个活动A和B. AndroidManifest中的这两个都只限于肖像。Android:避免在从其他活动返回时调用onCreate()

活动A开始活动B. 在活动B中,有一个按钮,单击时会调用finish()

问题是... 当我拥垂直(纵向)的设备,然后单击该按钮,调用顺序是

B.onStop(); 
B.onDestory(); 
A.onStart(); 

然而,当我横握设备(景观),序列成为

B.onStop(); 
B.onDestory(); 
A.onCreate(); 
A.onStart(); 

我不想在A.onCreate()

我试着按下Back按钮。没有调用A.onCreate()。 所以...模拟Back按钮是某种解决方案

我曾尝试以下,所有的人都称为A.onCreate() ..

finish(); 

onBackPressed() 

dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); 
dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK)); 

EDITED

我不得不再说一遍。 AndroidManifest中的这两项活动都仅限于肖像。 onConfigurationChanged永远不会被调用。

不接受静态变量。由于这会导致其他问题。

+0

在活动A中添加'android:configChanges =“orientation”'可以跳过'A.onCreate()'。但我期待更好的解决方案。 – 2013-05-08 06:44:05

+0

当方向更改时,活动被销毁并重新创建。如果你不想活动重新开始检查处理的配置改变自己在http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange – Raghunandan 2013-05-08 06:44:12

+1

看看这个:HTTP:// stackoverflow.com/questions/8814551/how-to-stop-activity-recreation-on-screen-orientation – andy 2013-05-08 06:52:56

回答

2

发生这种情况是因为您已经在应用程序启动的某个阶段更改了方向,即imo。
在方向改变时,活动被破坏然后重新创建。为了避免它处理方向。

通过在清单文件的活动下添加以下行来自行处理方向更改。

<activity android:name=".Activity_name" 
android:configChanges="orientation|keyboardHidden|screenSize" 
+0

我正在使用相同的解决方案,正如我对该问题的自己的评论中所述。 你的陈述是正确的,并且有效。只是想知道是否有更好的解决方案。 我不想将此行添加到Manifest中的所有活动。 – 2013-05-08 08:24:11

+0

@PeterLo,对不起,我错过了。这取决于你为什么不想再次调用onCreate()方法。应该有一些工作。 – 2013-05-08 08:54:01

0

如果你想不调用一些代码在onCreate时方向发生变化,你可以做如下:您的活动覆盖onRetainLastNonConfigurationInstance()

,并使其返回Boolean.TRUE

在你的onCreate检查Boolean.TRUE.equals(getLastNonConfigurationInstance()),如果是的话,这意味着你的onCreate已被调用,因为(并且只是)方向已被改变。

0

在你的条件,设置

<activity android:name=".Activity_name"android:configChanges="orientation|keyboardHidden|screenSize" 

可以避免活动重新创建新实例,但有些设备会导致黑屏的onCreate仍然会被调用,如果要防止出现这种情况,你可以覆盖onConfigurationChanged( )方法,并执行此操作:

@Override 
protected void onConfigurationChanged(Configuration newConfig) { 
    newConfig.orientation = Configuration.ORIENTATION_PORTRAIT; 
    super.onConfigurationChanged(newConfig); 
} 
相关问题