当我通过“片段”导航到“ 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);
}
}
}
};