MVVM startActivityForResult

Mar*_*rck 10 android mvvm

单击视图时,应调用 startActivityForResult。但是我不能在 viewModel 中调用 startActivityForResult。我怎样才能实现它?

Mar*_*rck 4

我在这里阅读了谷歌示例(https://github.com/googlesamples/android-architecture/tree/todo-mvvm-databinding)并找到了解决方案:

  1. 创建一个接口来实现:

    public interface TaskItemNavigator {
        void openTaskDetails(String taskId);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 视图模型中有弱引用:

    @Nullable
    private WeakReference<TaskItemNavigator> mNavigator;
    
    Run Code Online (Sandbox Code Playgroud)
  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);
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)