Xamarin FilePicker 块 UserDialog
Xamarin FilePicker blocks UserDialog
我正在使用方法
srcPath = await CrossFilePicker.Current.PickFile();
来自包 Xamarin.Plugin.FilePicker。这工作正常,我可以在我的设备上 select 一个文件。之后我想通过
给用户一个反馈
await UserDialogs.Instance.AlertAsync(message);
但是,在 Android Samsung SM-T805 上,对话消息被阻止。
在我看来,FilePicker 没有完全关闭。当到达 PickFile() 方法时,出现两个 windows:一个标题为 Android 的黑色,在确认访问外部存储后,实际的文件选择器。一旦我选择了一个文件,文件选择器就会消失,我的进一步代码就会被执行。但是背景层(深色,标题为 Android)在我离开 Xamarin.Forms.Command 方法之前不会消失,我将其链接到触发文件选择方法的按钮。
我的代码(大致):
[...]
using Xamarin.Forms;
using Plugin.FilePicker;
using Acr.UserDialogs;
namespace SomeNameSpace
{
public class SomeViewModel
{
[...]
public Command ImportCommand => new Command(() => ChooseFile());
private async void ChooseFile()
{
string srcPath = await CrossFilePicker.Current.PickFile();
await UserDialogs.Instance.AlertAsync("Help Me Please.");
// Further Code
[...]
}
}
}
有什么想法吗?提前致谢!
Nicole Lu 给出了使用 DisplayAlert 而不是 UserDialogs 的提示。仅仅改变这种方法是不够的。但是 DisplayAlert 允许您决定在哪个页面上发送警报。因此,诀窍是在使用 FilePicker 之前先保存当前页面,然后将警报发送到该页面。这是更新后的代码:
[...]
using Xamarin.Forms;
using Plugin.FilePicker;
using Acr.UserDialogs;
namespace SomeNameSpace
{
public class SomeViewModel
{
[...]
public Command ImportCommand => new Command(() => ChooseFile());
private async void ChooseFile()
{
Page page = App.Current.MainPage;
string srcPath = await CrossFilePicker.Current.PickFile();
await page.DisplayAlert("Help", "Please help me.", "OK");
// Further Code
[...]
}
}
}
我正在使用方法
srcPath = await CrossFilePicker.Current.PickFile();
来自包 Xamarin.Plugin.FilePicker。这工作正常,我可以在我的设备上 select 一个文件。之后我想通过
给用户一个反馈 await UserDialogs.Instance.AlertAsync(message);
但是,在 Android Samsung SM-T805 上,对话消息被阻止。
在我看来,FilePicker 没有完全关闭。当到达 PickFile() 方法时,出现两个 windows:一个标题为 Android 的黑色,在确认访问外部存储后,实际的文件选择器。一旦我选择了一个文件,文件选择器就会消失,我的进一步代码就会被执行。但是背景层(深色,标题为 Android)在我离开 Xamarin.Forms.Command 方法之前不会消失,我将其链接到触发文件选择方法的按钮。
我的代码(大致):
[...]
using Xamarin.Forms;
using Plugin.FilePicker;
using Acr.UserDialogs;
namespace SomeNameSpace
{
public class SomeViewModel
{
[...]
public Command ImportCommand => new Command(() => ChooseFile());
private async void ChooseFile()
{
string srcPath = await CrossFilePicker.Current.PickFile();
await UserDialogs.Instance.AlertAsync("Help Me Please.");
// Further Code
[...]
}
}
}
有什么想法吗?提前致谢!
Nicole Lu 给出了使用 DisplayAlert 而不是 UserDialogs 的提示。仅仅改变这种方法是不够的。但是 DisplayAlert 允许您决定在哪个页面上发送警报。因此,诀窍是在使用 FilePicker 之前先保存当前页面,然后将警报发送到该页面。这是更新后的代码:
[...]
using Xamarin.Forms;
using Plugin.FilePicker;
using Acr.UserDialogs;
namespace SomeNameSpace
{
public class SomeViewModel
{
[...]
public Command ImportCommand => new Command(() => ChooseFile());
private async void ChooseFile()
{
Page page = App.Current.MainPage;
string srcPath = await CrossFilePicker.Current.PickFile();
await page.DisplayAlert("Help", "Please help me.", "OK");
// Further Code
[...]
}
}
}