java - 在 LiveData 中调用 onChanged 事件时进行编辑
问题描述
我创建了一个简单的应用程序,它在调用 onChanged 事件时写入日志。目前,每次我通过 setValue 增加 MyInteger 时都会调用 onChanged。我想修改一下,只为特定事件调用 onChanged 例如,仅在 MyInteger > 3 时调用 onChanged。我试图覆盖 MyInteger 中的 equals 方法,但它不起作用。我怎样才能做到这一点?
public class MainActivity extends AppCompatActivity {
private MainActivityViewModel mMainActivityViewModel;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.my_button);
MyInteger myInteger = new MyInteger(0);
mMainActivityViewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);
mMainActivityViewModel.getLiveData2().observe(this, new Observer<MyInteger>() {
@Override
public void onChanged(MyInteger myInteger) {
Log.d("onChanged:", String.valueOf(myInteger.integer));
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myInteger.incrementByOne();
mMainActivityViewModel.getLiveData2().setValue(myInteger);
}
});
}
}
public class MainActivityViewModel extends AndroidViewModel {
public MutableLiveData<MyInteger> myIntegerMutableLiveData;
public MainActivityViewModel(@NonNull Application application) {
super(application);
}
public MutableLiveData<MyInteger> getLiveData2() {
if (myIntegerMutableLiveData == null) {
myIntegerMutableLiveData = new MutableLiveData<>();
}
return myIntegerMutableLiveData;
}
}
public class MyInteger {
MyInteger object.
public int integer;
public MyInteger(Integer integer) {
this.integer = integer;
}
public void incrementByOne() {
integer++;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyInteger myInteger = (MyInteger) o;
return myInteger.integer > 3;
}
@Override
public int hashCode() {
return Objects.hash(integer);
}
}
解决方案
为什么你不能做
if(myInteger > 3){
mMainActivityViewModel.getLiveData2().setValue(myInteger);
}
覆盖等号不会做任何事情,当您setValue
在 LiveData 中设置值时,即调用 onChanged 时。如果您需要扩展 LiveData 类
推荐阅读
- sharepoint - 如何为我的组织自定义 Delve?
- python - 更快地遍历 df 行
- python - 如何使用 azure cli 和 rest 命令清除设置?
- html - 无法绑定到“matDatePicker”,因为它不是“输入”的属性,尽管导入了所有内容
- flutter - 小部件未在颤动中显示
- google-sheets - Google 表格:如何删除多列中包含重复数据的行?
- c++ - 生成 Visual Studio 项目文件时出错(用于 Unreal 的 .sln)
- node.js - 获取 Matterjs 元素
- material-ui - 如何在 Datagrid 中获取有关列可见性更改的更新架构。(材料用户界面)?
- google-bigquery - `instanceof Date` 在 BigQuery UDF 中的行为不符合预期