Во-первых, личное замечание о том, что для вашего тега не следует использовать строковый литерал, рассмотрите возможность определения для него константы:
static final String TAG_SYNC_ORDERS = "SYNC_ORDERS";
Глядя на ваш код, вы получаете LiveData из вашего WorkRequest как:
LiveData<List<WorkInfo>> workInfos = WorkManager.getInstance().getWorkInfosByTagLiveData("sync_orders");
но затем вы используете другую LiveData (?) Из ViewModel:
viewModel.observeonWorkStatus()
Я предполагаю, что это то же самое.Если нет, то это проблема.
Переписав сейчас своего наблюдателя LiveData:
static final String TAG_SYNC_ORDERS = "SYNC_ORDERS";
LiveData<List<WorkInfo>> workInfos = WorkManager.getInstance().getWorkInfosByTagLiveData(TAG_SYNC_ORDERS);
workInfos.observe(this, listOfWorkInfo -> {
// If there are no matching work info, do nothing
if (listOfWorkInfo == null || listOfWorkInfo.isEmpty()) {
return;
}
// We only care about the one output status.
WorkInfo workInfo = listOfWorkInfo.get(0);
boolean finished = workInfo.getState().isFinished();
if (!finished) {
syncButton.setEnabled(false);
} else {
syncButton.setVisibility(View.GONE);
}
});
Вы можете обратиться к WorkManager codelab для более похожего примера.