如何解决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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。