0

我正在检查在实际设备上调试应用程序的外观。以下代码只是根据重复按下的次数更改按钮的文本。

它正在完美地增加,但是当我倾斜设备并切换到横向时,按钮将其文本更改为初始状态。我再次按下并再次倾斜,值再次被重置。

后台发生了什么?以及如何阻止它?

b.setOnClickListener( new OnClickListener() {
    int i = 1;

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        // Toast.makeText(MainActivity.this, "Pressed ", Toast.LENGTH_SHORT).show();
        b.setText("press "+ i);
        i++;
    }
});
4

6 回答 6

3

当您倾斜设备时,您的活动被破坏并再次调用 oncreate。您必须保留重新启动时想要取回的值。有几种方法可以做到这一点。在快捷方式中,您可以在清单文件中的 Activity 中添加一个标志,即 android:configchanges = "orientation"。

<activity
            android:name=".Splash"
            android:configChanges="orientation"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

Aur 将您的值保存在 onPause 或 onBundleSaveinstance 生命周期回调方法中。

于 2012-08-22T06:57:26.090 回答
2

您需要使用 onSaveInstanceState 来保存数据,因为方向更改时数据会丢失。谷歌 onSaveInstanceState 如果你仍然有问题问。

于 2012-08-22T06:58:47.903 回答
2

是的,因为您的活动将重新开始。您需要将有关方向更改的数据保存到已保存的即时,否则您需要限制活动中的方向更改。

于 2012-08-22T06:55:55.667 回答
1

你需要android:screenOrientation="landscape"在 AndroidManifest.xml 中分配,看下面的代码,

<application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity" android:label="@string/app_name" android:screenOrientation="landscape" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
于 2012-08-22T06:55:38.203 回答
1

当屏幕方向改变时,Activity 会被销毁并重新创建。

您可以将其锁定到一个方向。

或者

使用onSaveInstanceState保存应用程序的状态,然后在 onCreate 或onRestoreInstanceState中恢复它

于 2012-08-22T07:03:19.567 回答
0

每次活动更改方向时,您的活动都会重新启动(调用 onCreate),为避免这种情况,您可以在 androidmanifest android:configChanges="orientation" 中设置活动。

于 2012-08-22T06:58:35.143 回答