android - 带有 Switch Cases 的 Android ViewModel 不起作用?
问题描述
准确地说,它正在工作,但 ViewModel 正在触发所有案例而不是选定案例。
如果我将值 enablethis 设置为“one”或其他值,则不会对其产生任何影响。理想情况下,如果我将 enablethis 设置为这些 [one,two,..] 中的任何一个,它应该只启用那种情况,并且只在这种情况下将按下的值设置为“true”。但这并没有发生。
我发现所有观察者都在观察值的任何变化,即使它们在开关盒内并导致按下=真。我怎样才能避免这种情况。
switch (enablethis) {
case "four":
messageViewModel.getMessageOne().observe((LifecycleOwner) ctx, new Observer<Integer>() {
@Override
public void onChanged(@Nullable Integer integer) {
if (integer > 0) pressed = true;
Log.d("message one","one : "+integer);
}
});
break;
case "two":
messageViewModel.getMessageTwo().observe((LifecycleOwner) ctx, new Observer<Integer>() {
@Override
public void onChanged(@Nullable Integer integer) {
if (integer > 0) pressed = true;
Log.d("message two","two : "+integer);
}
});
break;
case "two":
messageViewModel.getMessageThree().observe((LifecycleOwner) ctx, new Observer<Integer>() {
@Override
public void onChanged(@Nullable Integer integer) {
if (integer > 0) pressed = true;
Log.d("message three","three : "+integer);
}
});
break;
case "three":
messageViewModel.getMessageFour().observe((LifecycleOwner) ctx, new Observer<Integer>() {
@Override
public void onChanged(@Nullable Integer integer) {
if (integer > 0) pressed = true;
Log.d("message four","four : "+integer);
}
});
break;
case "four":
messageViewModel.getMessageFive().observe((LifecycleOwner) ctx, new Observer<Integer>() {
@Override
public void onChanged(@Nullable Integer integer) {
if (integer > 0) pressed = true;
Log.d("message five","five : "+integer);
}
});
break;
}
我也尝试过这样做,但这也不起作用-
messageViewModel.getMessageFive().observe((LifecycleOwner) ctx, new Observer<Integer>() {
@Override
public void onChanged(@Nullable Integer integer) {
if (integer > 0 && enablethis.equals("five")) pressed = true;
}
});
由@JeelVankhede建议和更新的解决方案仍然无法正常工作-**
messageViewModel.getMessageFive().observe((LifecycleOwner) ctx, new Observer<Integer>() {
@Override
public void onChanged(@Nullable Integer integer) {
if (integer > 0) pressed = true;
}
});
messageViewModel.getMessageOne().removeObserver(this);
messageViewModel.getMessageTwo().removeObserver(this);
messageViewModel.getMessageThree().removeObserver(this);
messageViewModel.getMessageFour().removeObserver(this);
// messageViewModel.getMessageFive().removeObserver(this);
解决方案
推荐阅读
- r - get wrong values when level factors
- python - 我得到一个 ValueError: could not convert string to float: 'f' when running a linear model fit。我已经转换了所有字符串。为什么我会收到此错误?
- c++ - How can I delegate a derived class to use it's parents constructor?
- php - Laravel:为什么要向所有模块发送邮件?
- javascript - Jquery kendo grid prevent clicking only non edit rows when in edit mode
- c++ - How to use libiconv correctly in C so that it would not report "Arg list too long"?
- java - Java双参数递归
- c++ - C++ map segmentation fault (core dumped)
- docker - ln:无法创建符号链接“/dev/shm/download/file.out”:在 docker 容器内
- algorithm - 是否有有效实施这种加密算法的数据结构?