Android - представление не обновляется динамически - PullRequest
2 голосов
/ 06 марта 2019

Я использую фрагмент и пытаюсь обновить вид после перехода обратно к фрагменту из намерения.Этот фрагмент запускает намерение и является возвращаемым представлением из этого намерения:

FragmentA -> Intent -> FragmentA

Мое связывание работает, если я никогда не запускаю это намерение.Однако после запуска этого намерения мои привязки не сохраняются динамически, только когда я возвращаюсь к приложению.

Я использую LocationServices, а когда вызываются методы onProviderEnabled or onProviderDiabled, я устанавливаюзначение свойства из моей ViewModel.Опять же, это прекрасно работает, если Intent не запускается.Однако, когда я возвращаюсь к фрагменту из намерения, и службы либо отключены, либо включены, представление не будет обновляться.Когда я отлаживаю, значения верны, но они не отражаются в моем фрагменте.

Я провел много исследований по этому вопросу и не могу понять.Мне кажется, что я делаю все правильно, чтобы реализовать ObservableFields.

В моей ViewModel:

private ObservableField<String> statusMessage = new ObservableField<>();
public ObservableField<String> getStatusMessage() {return statusMessage;}

И в моем View, привязка установлена ​​как:

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")

И в xml моего просмотра: android:text='@{viewModel.statusMessage}

Я не понимаю, почему моя привязка не сохраняется.Это из-за запускаемых сервисов?Я не создаю новую ViewModel, он не появляется, потому что экземпляр ViewModel создается в onCreate, и единственный момент срабатывания точки останова - при первом запуске.

Я не переопределяюonResume или что-нибудь подобное в данный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...