我发现当我们通过屏幕旋转更改当前活动的方向时,之前的活动将在后台重新创建。
我想说的是,例如:
我已在清单文件
中为两个活动设置了屏幕方向<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()方法。
我发现同样的事情发生在:
有人对此有所了解吗?
答案 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>
。