当以不同的屏幕方向开始下一个活动时,将重新创建Android Activity

时间:2012-04-03 09:52:13

标签: android

我发现当我们通过屏幕旋转更改当前活动的方向时,之前的活动将在后台重新创建。

我想说的是,例如:

我已在清单文件

中为两个活动设置了屏幕方向
<activity android:screenOrientation="portrait" android:name="package.PotraitActivity"></activity>
<activity android:screenOrientation="landscape" android:name="package.MyActivity"></activity>

在PotraitActivity.java中,

Button mybutton = (Button)findViewById(R.id.mybutton);
mybutton.setOnClickListener(new OnClickListener() {

  @Override
  public void onClick(View view) 
  {  Intent intent = new Intent(this,MyActivity.class);
     startActivity(intent);
  }
});

单击myButton时,已启动LandscapeActivity。但同时也调用了PotraitActivity中的OnCreate()方法。

我发现同样的事情发生在:

  1. 两项活动的屏幕方向不同或
  2. 为MyActivity启用了屏幕旋转(screenOrientation =“user”)。每次旋转MyActivity时都会调用PotraitActivity中的OnCreate()方法。
  3. 有人对此有所了解吗?

4 个答案:

答案 0 :(得分:1)

android:configChanges="orientation"设置为清单中的 package.PotraitActivity 活动。设置此项将忽略默认的屏幕方向实现,并为您提供手动覆盖它的控件。

答案 1 :(得分:1)

在按钮的onclick功能中调用finish()。

 Button mybutton = (Button)findViewById(R.id.mybutton);
mybutton.setOnClickListener(new OnClickListener() {

  @Override
  public void onClick(View view) 
  {  Intent intent = new Intent(this,MyActivity.class);
     startActivity(intent);
     finish();
  }
});

...谢谢

答案 2 :(得分:0)

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

最好在oncreate()中设置方向,并在清单文件中为两个活动添加此行

机器人:configChanges = “keyboardHidden |取向”

答案 3 :(得分:0)

我最近遇到过类似情况,实在令人沮丧。所以我决定在这里写我的解决方案,虽然这是一个老问题。

有两项活动,活动A和活动B.活动A是纵向活动,而用于显示视频的活动B是横向活动。

当活动A开始活动B时发生奇怪的事情。活动A每次启动活动B时都会重新创建。

但是,我写了一个类似的演示,这些事情都没有发生。

我怀疑有什么区别,并在原始项目的styles.xml中找到这一行。

<item name="android:windowIsTranslucent">true</item>

所以我删除了这一行并再次重启项目。每件事情都恢复正常。

这是我的猜测: 活动B中的SurfaceView将在其窗口中打孔以允许其表面显示。加上android:windowIsTranslucent属性,系统判断先前的活动是否可见并再次重新创建。

解决方案: 只需删除<item name="android:windowIsTranslucent">true</item>