MVVM startActivityForResult

11
当点击一个视图时,应该调用 startActivityForResult。但我不能在 viewModel 中调用 startActivityForResult。我该如何实现?
1个回答

4

我已阅读了谷歌的示例代码(https://github.com/googlesamples/android-architecture/tree/todo-mvvm-databinding),并找到了解决方案:

  1. create a interface to implement:

    public interface TaskItemNavigator {
        void openTaskDetails(String taskId);
    }
    
  2. have a weak reference in view model:

    @Nullable
    private WeakReference<TaskItemNavigator> mNavigator;
    
  3. implement it in activity:

    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);
        }
    }
    

1
这是解决问题的一种有效方式,但是问题在于如何使用MVVM模式来解决它。在MVVM中,视图观察视图模型 - 视图模型没有引用视图。因此,如果OP想要使用MVVM,答案就不是一个有效的方法。 - Piotr Aleksander Chmielowski
1
抱歉,但这绝对不是一种清洁的实现方式。 - issamux
@issamux 或许是这样,但如果你不去实现类似 SingleLiveEvent 这样的东西,这可能是唯一正确的方法。 - Spidey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接