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似乎并不能解决这个问题。我看到的主要问题是,你的听众似乎有点疯狂。我会先杀了它——你的听众应该做这个把戏。除此之外,我没有看到任何向我扑来的东西。