Android数据绑定 - 旋转时查看松散绑定

时间:2015-07-26 18:25:19

标签: android data-binding binding

我正在创建一个专门的计时器应用程序。在倒计时期间,我正在显示倒数计时器以及做其他一些事情。来自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>

这没有任何帮助。我错过了什么? (可能很多!)

1 个答案:

答案 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上运行,也不会重新启动您的活动   更高的设备)。