确切地说,它可以工作,但是ViewModel会触发所有案例而不是选定案例。
如果将值enablethis设置为“一个”或其他,则不会对其产生任何影响。理想情况下,如果我将enablethis设置为这些[one,two,..]中的任何一个,则它应仅启用该情况,并且仅在该情况下将press的值设置为“ true”。但这没有发生。
我发现所有观察者都在观察值的任何变化,即使它们在开关盒内并导致按下= 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);