我正在检查在实际设备上调试应用程序的样子。以下代码只是根据重复按下的次数更改按钮的文本。
它完美地增加了,但是当我倾斜设备并且它切换到横向时,按钮将其文本更改为初始状态。我再次按下并再次倾斜,价值再次重置。
后台发生了什么?以及如何阻止它?
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++;
}
});
答案 0 :(得分: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生命周期回调方法中保存您的值。
答案 1 :(得分:2)
是的,因为您的活动将重新启动。您需要将方向更改的数据保存到已保存的即时消息,否则您需要限制活动中的方向更改。
答案 2 :(得分:2)
您需要使用onSaveInstanceState来保存数据,因为方向更改时数据会丢失。谷歌onSaveInstanceState,如果你仍然有问题。
答案 3 :(得分:1)
您需要在AndroidManifest.xml中分配android:screenOrientation="landscape"
,请查看以下代码,
<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>
答案 4 :(得分:1)
当屏幕方向改变时,活动将被销毁并重新创建。
您可以将其锁定到一个方向。
或
使用onSaveInstanceState保存您的申请状态,然后在onCreate或onRestoreInstanceState
中恢复答案 5 :(得分:0)
每次活动更改方向时,您的活动都会重新启动(onCreate被调用),为了避免这种情况,您可以在androidmanifest中设置android:configChanges =“orientation”到活动。