MVVM startActivityForResult

При щелчке по представлению следует вызвать startActivityForResult. Но я не могу вызвать startActivityForResult в viewModel. Как я могу этого добиться?

10
0
2 756
1

Ответы 1

Я прочитал образцы Google здесь (https://github.com/googlesamples/android-architecture/tree/todo-mvvm-databinding) и нашел решение:

  1. создать интерфейс для реализации:

    public interface TaskItemNavigator {
        void openTaskDetails(String taskId);
    }
    
  2. иметь слабую ссылку в модели представления:

    @Nullable
    private WeakReference<TaskItemNavigator> mNavigator;
    
  3. реализовать это в деятельности:

    public class TasksActivity extends AppCompatActivity implements TaskItemNavigator{
        ...
        @Override
        public void openTaskDetails(String taskId) {
            Intent intent = new Intent(this, TaskDetailActivity.class);
            intent.putExtra(TaskDetailActivity.EXTRA_TASK_ID, taskId);
            startActivityForResult(intent, AddEditTaskActivity.REQUEST_CODE);
        }
    }
    

Это допустимый способ решения проблемы, однако вопрос заключается в том, чтобы решить ее с помощью шаблона MVVM. В MVVM представление наблюдает за моделью представления - модель представления не имеет ссылки на представление. Поэтому ответ не является допустимым, если OP хочет использовать MVVM.

Piotr Aleksander Chmielowski 02.03.2020 14:56

Извините, но это абсолютно не чистый способ добиться этого

issamux 07.04.2020 22:28

Возможно, @issamux, но если вы не реализуете что-то вроде SingleLiveEvent, это, вероятно, единственный правильный способ сделать это.

Spidey 10.04.2020 13:09

Другие вопросы по теме