Android片段绑定

时间:2019-02-27 19:43:54

标签: java android android-fragments

当我通过“片段”导航到“ Android设备设置”时,似乎数据绑定被破坏了,

 private View.OnClickListener systemListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent locationIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
        startActivity(locationIntent);
    }
};

如果我不打开“位置”,那么回到“片段”并且我的数据绑定仍然存在时,一切都可以正常工作。

但是,如果我打开“位置”并返回到“片段”,则我所有的绑定都将断开。

我能够调试我的应用程序,并且ViewModel的变量具有正确的值,但是View不能反映这一点。如果我完全脱离了片段并导航回它,则绑定将重新更新,并且它们可以工作。我相信是因为我在onCreate方法中设置了绑定。

我没有重写onResume (only to register a Broadcast Receiver), onStop, or onStart,因为我认为绑定将继续存在。

该字段的ViewModel看起来像这样:

 private ObservableBoolean isServiceEnabled = new ObservableBoolean();
 public void setIsServiceEnabled(boolean isServiceEnabled) {
    this.isServiceEnabled.set(isServiceEnabled);
}

public ObservableBoolean getIsServiceEnabled() { return isServiceEnabled;}

我的片段:

android:visibility="@{viewModel.isServiceEnabled ? View.VISIBLE : View.INVISIBLE}"

“我的片段”代码可检测位置是否已禁用/启用:

 private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().matches("android.location.PROVIDERS_CHANGED")) {
            if (checkIfLocationServicesAreAlreadyRunning()) {
                refreshLocation();
                mViewModel.setIsServiceEnabled(true);
            } else {
                mViewModel.setIsServiceEnabled(false);
            }
        }
    }
};

0 个答案:

没有答案