Android Oretation更改奇怪的问题
在更改模拟器的方向时,我遇到了一些非常奇怪的问题。在我的应用程序中,当一个图像按钮点击时,我从我的主活动中调用名为“设置”的活动。以下是代码:Android Oretation更改奇怪的问题,android,Android,在更改模拟器的方向时,我遇到了一些非常奇怪的问题。在我的应用程序中,当一个图像按钮点击时,我从我的主活动中调用名为“设置”的活动。以下是代码: final ImageButton stbtn = (ImageButton) findViewById(R.id.stbtn); stbtn.setOnClickListener(new OnClickListener() { public void onClick(View v) {
final ImageButton stbtn = (ImageButton) findViewById(R.id.stbtn);
stbtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent stopn = new Intent(MyApp.this, Settings.class);
startActivity(stopn);
}
});
以下是我如何关闭“设置”活动:
@Override
public void onBackPressed() {
// do something on back.
finish();
return;
}
@Override
protected void onPause(){
super.onPause();
saveSettings();
}
public class Settings extends Activity {
//Your member variable declaration here
private RadioButton crbon;
private RadioButton blue;
private RadioButton bbl;
private RadioButton crbdig;
private RadioButton grndig;
private ToggleButton tb24;
private ToggleButton tbsec;
// Called when the activity is first created.
@Override
public void onCreate(Bundle savedInstanceState) {
//Your code here
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
myappApp clkapp = ((myappApp)getApplicationContext());
//RadioGroup rbgrp = (RadioGroup)findViewById(R.id.rbfacegrp);
crbon=(RadioButton)findViewById(R.id.radio_carbon);
blue=(RadioButton)findViewById(R.id.radio_blue);
bbl=(RadioButton)findViewById(R.id.radio_bbl);
crbdig=(RadioButton)findViewById(R.id.radio_crbdig);
grndig=(RadioButton)findViewById(R.id.radio_grndig);
tb24=(ToggleButton)findViewById(R.id.tbhr);
tbsec=(ToggleButton)findViewById(R.id.tbsec);
if(clkapp.getClkStyle().toLowerCase().equals("black")) {
crbon.setChecked(true);
}
else if(clkapp.getClkStyle().toLowerCase().equals("blue")) {
blue.setChecked(true);
}
else if(clkapp.getClkStyle().toLowerCase().equals("bubble")) {
bbl.setChecked(true);
}
else if(clkapp.getClkStyle().toLowerCase().equals("digitalblack")) {
crbdig.setChecked(true);
}
else if(clkapp.getClkStyle().toLowerCase().equals("digitalgreen")) {
grndig.setChecked(true);
}
tb24.setChecked(clkapp.is24Hr());
tbsec.setChecked(clkapp.isDisplaySec());
}
@Override
protected void onPause(){
super.onPause();
saveSettings();
//this.finish();
}
protected void saveSettings() {
boolean clkAna = true;
myappApp clkapp = ((myappApp)getApplicationContext());
SharedPreferences.Editor edt = clkapp.clkSettings.edit();
edt.putBoolean("24Hr", tb24.isChecked());
edt.putBoolean("dSecond", tbsec.isChecked());
clkapp.set24Hr(tb24.isChecked());
clkapp.setDisplaySec(tbsec.isChecked());
if (crbon.isChecked()) {
edt.putString("ClkAnalogStyle", "Black");
clkapp.setClkStyle("Black");
clkAna = true;
}
else if (blue.isChecked()) {
edt.putString("ClkAnalogStyle", "Blue");
clkapp.setClkStyle("Blue");
clkAna = true;
}
else if (bbl.isChecked()) {
edt.putString("ClkAnalogStyle", "Bubble");
clkapp.setClkStyle("Bubble");
clkAna = true;
}
else if (crbdig.isChecked()) {
edt.putString("ClkAnalogStyle", "DigitalBlack");
clkapp.setClkStyle("DigitalBlack");
clkAna = false;
}
else if (grndig.isChecked()) {
edt.putString("ClkAnalogStyle", "DigitalGreen");
clkapp.setClkStyle("DigitalGreen");
clkAna = false;
}
clkapp.setAnalog(clkAna);
edt.putBoolean("ClkAnalogue", clkAna);
edt.commit();
}
@Override
public void onBackPressed() {
// do something on back.
finish();
return;
}
}
在我的主要活动中,我有每秒更新屏幕的表面视图。我进入“设置”屏幕更改设置,然后按“上一步”按钮将其关闭,然后它将进入“主活动”屏幕。此操作正常。现在的问题是,当我改变方向时,当应用程序在主屏幕上时,它会重新打开设置活动。是因为我没有正确关闭活动还是其他原因?有人能帮我吗?谢谢
编辑:
以下是维护活动的代码
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp"
android:versionCode="1"
android:versionName="1.0">
<application android:name=".myappApp" android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MyAlarm"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:configChanges="orientation"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Settings" android:label="@string/app_name">
</activity>
</application>
</manifest>
设置活动:
@Override
public void onBackPressed() {
// do something on back.
finish();
return;
}
@Override
protected void onPause(){
super.onPause();
saveSettings();
}
public class Settings extends Activity {
//Your member variable declaration here
private RadioButton crbon;
private RadioButton blue;
private RadioButton bbl;
private RadioButton crbdig;
private RadioButton grndig;
private ToggleButton tb24;
private ToggleButton tbsec;
// Called when the activity is first created.
@Override
public void onCreate(Bundle savedInstanceState) {
//Your code here
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
myappApp clkapp = ((myappApp)getApplicationContext());
//RadioGroup rbgrp = (RadioGroup)findViewById(R.id.rbfacegrp);
crbon=(RadioButton)findViewById(R.id.radio_carbon);
blue=(RadioButton)findViewById(R.id.radio_blue);
bbl=(RadioButton)findViewById(R.id.radio_bbl);
crbdig=(RadioButton)findViewById(R.id.radio_crbdig);
grndig=(RadioButton)findViewById(R.id.radio_grndig);
tb24=(ToggleButton)findViewById(R.id.tbhr);
tbsec=(ToggleButton)findViewById(R.id.tbsec);
if(clkapp.getClkStyle().toLowerCase().equals("black")) {
crbon.setChecked(true);
}
else if(clkapp.getClkStyle().toLowerCase().equals("blue")) {
blue.setChecked(true);
}
else if(clkapp.getClkStyle().toLowerCase().equals("bubble")) {
bbl.setChecked(true);
}
else if(clkapp.getClkStyle().toLowerCase().equals("digitalblack")) {
crbdig.setChecked(true);
}
else if(clkapp.getClkStyle().toLowerCase().equals("digitalgreen")) {
grndig.setChecked(true);
}
tb24.setChecked(clkapp.is24Hr());
tbsec.setChecked(clkapp.isDisplaySec());
}
@Override
protected void onPause(){
super.onPause();
saveSettings();
//this.finish();
}
protected void saveSettings() {
boolean clkAna = true;
myappApp clkapp = ((myappApp)getApplicationContext());
SharedPreferences.Editor edt = clkapp.clkSettings.edit();
edt.putBoolean("24Hr", tb24.isChecked());
edt.putBoolean("dSecond", tbsec.isChecked());
clkapp.set24Hr(tb24.isChecked());
clkapp.setDisplaySec(tbsec.isChecked());
if (crbon.isChecked()) {
edt.putString("ClkAnalogStyle", "Black");
clkapp.setClkStyle("Black");
clkAna = true;
}
else if (blue.isChecked()) {
edt.putString("ClkAnalogStyle", "Blue");
clkapp.setClkStyle("Blue");
clkAna = true;
}
else if (bbl.isChecked()) {
edt.putString("ClkAnalogStyle", "Bubble");
clkapp.setClkStyle("Bubble");
clkAna = true;
}
else if (crbdig.isChecked()) {
edt.putString("ClkAnalogStyle", "DigitalBlack");
clkapp.setClkStyle("DigitalBlack");
clkAna = false;
}
else if (grndig.isChecked()) {
edt.putString("ClkAnalogStyle", "DigitalGreen");
clkapp.setClkStyle("DigitalGreen");
clkAna = false;
}
clkapp.setAnalog(clkAna);
edt.putBoolean("ClkAnalogue", clkAna);
edt.commit();
}
@Override
public void onBackPressed() {
// do something on back.
finish();
return;
}
}
当设备旋转时,它会杀死并重新创建活动,这是一个真正的痛苦。除非您确实需要此行为,否则最简单的方法是禁用它。要做到这一点,请在AndroidManifest中使用以下命令,告诉系统您将自己处理旋转。一般来说,这实际上不需要特殊的代码,它只是工作
这听起来不像是典型的恢复活动状态的常见问题--@Parashar说旋转实际上是启动设置活动…这不应该发生,如果实际上有两个不同的活动。是的,你说对了@Cheezmeister,这正是我的问题,我不知道是什么原因造成的。我有两种不同的活动。我不明白为什么设置活动再次出现,即使我在方向改变之前关闭了它。如果你同时发布活动和清单,我会看看是否能看到问题。我仍然希望明显的改变能够解决这些症状。是吗?我已经更新了我的帖子,加入了主代码。。改变mainfest似乎并不能解决这个问题。我看到的主要问题是,你的听众似乎有点疯狂。我会先杀了它——你的听众应该做这个把戏。除此之外,我没有看到任何向我扑来的东西。