我正在创建一个专门的计时器应用程序。在倒计时期间,我正在显示倒数计时器以及做其他一些事情。来自MVVM背景我想为这个项目使用新的Android绑定框架。我在示例中设置了我的视图:
<data>
<variable
name="viewModel"
type="com.examples.viewmodels.MainActivityVM"/>
</data>
使用TextView显示倒计时。
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@{viewModel.timeLeftText}"
android:textAlignment="center"
android:textSize="144dp"/>
活动的课程我在onCreate覆盖中设置了绑定:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setViewModel(this.viewModel);
}
一切都像宣传的那样有效。我可以单击视图上的按钮并开始倒计时。我写的业务逻辑类处理更新视图模型实例的剩余时间和视图更新,如我所料。太好了!
但是,我遇到了一个问题,即如果设备从纵向旋转到横向,视图将完全失去与视图模型的连接。奇怪的是它恢复到默认的开始状态,好像应用程序刚刚第一次启动一样。
在我看来,有一种情况是应用程序可以暂停,然后根据更改恢复。我通过查看Google进行了验证,发现应用可能暂停并在方向更改时恢复。我将清单中的活动更改为:
<activity
android:name=".MainActivity"
android:configChanges="orientation"
android:label="@string/app_name">
...
</activity>
这没有任何帮助。我错过了什么? (可能很多!)
答案 0 :(得分:0)
首先,Android活动总是被销毁并在其方向发生变化时重新创建。用你的话try {
jQuery.ajax({
type: "POST",
url: "http://localhost:8080/Token",
cache: false,
data: {
"username": document.getElementById("username").value,
"password": document.getElementById("password").value
},
dataType: "json",
success: getSuccess,
error: getFail
});
// ...
。这没有什么奇怪的,事实上它明确提到了here。
如果您希望Android系统不重新创建活动,可以使用
What's odd is that it goes back to its default start state as if the app has just started for the first time
您的代码无法运行的原因是因为您可能正如here提到的那样针对API级别13+。
从Android 3.2(API级别13)开始,&#34;屏幕尺寸&#34;也 设备在纵向和横向之间切换时更改 取向。因此,如果您希望阻止运行时重新启动 开发API级别13或更高级别时的方向更改(如 由minSdkVersion和targetSdkVersion属性声明),你 必须包括&#34; screenSize&#34;价值以及&#34;方向&#34; 值。也就是说,你必须decalare 机器人:configChanges =&#34;取向|屏幕尺寸&#34 ;.但是,如果你的 应用程序目标API级别12或更低,然后您的活动始终 处理此配置更改本身(此配置更改 即使在Android 3.2或Android上运行,也不会重新启动您的活动 更高的设备)。