我正在使用一个Fragment,我试图从一个Intent导航回Fragment后更新View。该片段启动了Intent,并且是该Intent的返回视图:
FragmentA -> Intent -> FragmentA
如果我从不启动此Intent,则绑定有效。但是,一旦启动此Intent,我的绑定就不会动态持久化,只有当我导航回该应用程序时。
我正在使用LocationServices
,并且在调用onProviderEnabled or onProviderDiabled
方法时,我正在通过ViewModel设置属性的值。同样,如果Intent无法启动,则此方法也很好。但是,当我从“意图”返回到“片段”并且服务被禁用或启用时,视图将不会更新。当我调试时,这些值是正确的,但是它们并没有反映在我的片段中。
我对此进行了大量研究,无法弄清楚。我觉得我在做正确的事情来实现ObservableFields
。
在我的ViewModel中:
private ObservableField<String> statusMessage = new ObservableField<>();
public ObservableField<String> getStatusMessage() {return statusMessage;}
在我的视图中,绑定设置为:
onCreateView(Shortened for brevity..)
binding = DataBindingUtil.inflate(inflater, R.layout.my_fragment, container, false);
binding.setLifecycleOwner(this);
View root = binding.getRoot();
binding.setViewModel(myViewModel);
我的基本意图:
private View.OnClickListener gpsService = v -> {
Intent myIntent= new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(myIntent);
};
对于onProviderEnabled
,我正在设置变量myViewModel.getStautsMessage().set("Enabled")
在我的View的xml中:
android:text='@{viewModel.statusMessage}
我不明白为什么我的绑定没有被保留。是因为服务启动了吗?我没有创建新的ViewModel,它没有出现,因为ViewModel是在onCreate
中实例化的,并且唯一触发断点的时间是在首次启动时。
目前我还没有覆盖onResume
或类似的东西。