Android MutableLiveData无法反映回主要活动UI

问题描述

我一直在尝试通过在此处检查类似的问题来解决我的问题,但无济于事。所以我决定将其发布。

方案:我有以下文件(MainActivity,FormActivity,DatabaseHelper,CounterViewModel)。在应用打开时,它会点击MainActivity并通过从 CounterViewModel 请求getCounter来显示总数。当我去 FormActivity 更新计数器时,它通过 DatabaseHelper 类保存到SQLite中,在那里我调用setCounter来更新值。但是,当保存完计数器后应用程序返回MainActivity UI时,计数不会更新。

CounterViewModel

public class CounterViewModel extends ViewModel {

    private String TAG = "=== " + this.getClass().getSimpleName() + " ===";
    private MutableLiveData<Integer> counter = new MutableLiveData<>();

    public MutableLiveData<Integer> getCounter() {
        return counter;
    }

    public void setCounter(int newCount) {
        counter.postValue(newCount);
        Log.d(TAG,"New count is " + newCount);
    }

}

MainActivity

// this is located inside the onCreate()
CounterViewModel counterViewModel = ViewModelProviders.of(this).get(CounterViewModel.class);
LiveData<Integer> counter = counterViewModel.getCounter();

counter.observe(this,new Observer<Integer>() {
    @Override
    public void onChanged(Integer integer) {
        Log.d(TAG,"OBSERVED " + integer);
        labelScanTotal.setText(String.format(Locale.getDefault(),"%d",integer));
    }
});

数据库帮助器

// From the FormActivity the dbhelper.updateCount() is called. Below is the part where the ViewModel is called
MainActivity mainActivity = new MainActivity();
CounterViewModel counterViewModel = ViewModelProviders.of(mainActivity).get(CounterViewModel.class);
counterViewModel.setCounter(getCount());

解决方法

将ViewModelProviders更改为ViewModelProvider

CounterViewModel counterViewModel =    ViewModelProviders.of(mainActivity).get(CounterViewModel.class);

CounterViewModel counterViewModel = ViewModelProvider.(this).get(CounterViewModel.class);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...