2012-04-03 43 views
2

我发现当我们通过屏幕旋转更改当前活动的方向时,之前的活动将在后台重新创建。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 =“用户”)启用。每次我们旋转MyActivity时,都会调用PotraitActivity中的OnCreate()方法。

任何人都有想法吗?

回答

0

android:configChanges="orientation"设置为您的package.PotraitActivity清单中的活动。设置这将忽略默认的屏幕方向实现,并会给你控制手动覆盖它。

+0

即使我已经设置了android:configChanges =“orientation”,发生了这种情况......无论如何感谢您的评论=) – Soosoo 2012-04-03 09:57:35

+0

糟糕对不起Waqas ....我曾尝试将android:configChanges =“orientation”添加到包中。 PotraitActivity,它是作品!你能否进一步解释为什么这样做? – Soosoo 2012-04-03 10:11:25

+0

这个设置告诉框架,如果方向发生变化,你会在你的代码中手动处理它(加载新的布局,如果有的话) – waqaslam 2012-04-03 10:59:19

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(); 
    } 
}); 

谢谢...

+1

我试过了,它是工作。你有没有任何想法,为什么活动继续重新创建没有调用finish()?因为我知道OnCreate方法只会在活动首次创建时调用。无论如何感谢您的答案。这对我很有帮助=) – Soosoo 2012-04-03 10:19:36

+0

只有在活动首次创建时才会调用OnCreate方法。当我们转到另一个屏幕时暂停,当我们再次调用它时,继续它。但是如果我们调用finish(),那么这个活动就会破坏并再次启动它。谢谢,如果我的回答有帮助,请你投我一票。 – user4232 2012-04-03 10:29:09

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

最好设置在OnCreate中)方向(也包括manifeast文件中加入这一行均具有活性

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

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>

相关问题