Android ViewModel с Switch Cases не работает? - PullRequest
0 голосов
/ 02 апреля 2019

Точно, это работает, но ViewModel запускает все случаи вместо выбранного случая.

Если я установлю значение enablethis на «один» или что-то еще, это не повлияет на него.В идеале, если я установлю enablethis для любого из этих [one, two, ..], он должен включить только этот случай и установить значение нажатой на «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);
...