【发布时间】:2017-02-26 21:09:31
【问题描述】:
我正在尝试创建一个可等待的方法来收集用户输入,我可以从我的 viewmodel/core 调用它。 在 android 上,我想展示一个带有输入字段和“确定”按钮的新活动。一旦用户点击 OK,用户输入活动应该被关闭并且该方法应该完成。存储和管理数据不是问题,但实际呈现用户输入活动是问题。
我有一个带有等待此方法的按钮的小项目。我可以看到一个活动过渡动画,但 MultiChoiceActivity 的(非常简单的)布局实际上从未显示。
//### ViewModel
public MvxAsyncCommand ShowListWithTitleCommand
{
get
{
_showListWithTitleCommand = _showListWithTitleCommand ?? new MvxAsyncCommand(() => DoShowListCommandAsync("Alt title"));
return _showListWithTitleCommand;
}
}
private async Task DoShowListCommandAsync(string title)
{
var bundle = new DialogServiceMultiItemsBundle(title, _allItems, _checkedItems.ToArray());
var result = await _dialog.ShowMultipleChoice(bundle);
}
//### Awaitable method
public Task<List<int>> ShowMultipleChoice(DialogServiceMultiItemsBundle bundle)
{
LastTcs = new TaskCompletionSource<List<int>>();
LastBundle = bundle;
CurrentContext.RunOnUiThread(() => {
CurrentContext.StartActivity(typeof(MultiChoiceActivity));
});
return LastTcs.Task;
}
我应该如何在活动转换中等待此方法?在方法中添加 async-await 似乎没有什么区别。
我没有成功地尝试 Task.Run() 离开 UI 线程(与上面的行为相同):
return await Task.Run<List<int>>(async () => { return await LastTcs.Task; });
【问题讨论】:
-
我们可以假设您正在调用
LastTcs.SetResult()(或来自MultiChoiceActivity代码的LastTcs.SetException()? -
最终我会的,是的。但是,应该在调用 SetResult() 之前触发活动导航。
标签: c# android xamarin xamarin.android mvvmcross