Tôi đang sử dụng MvvmCross để tạo Android ứng dụng của tôi và tôi phải đối mặt với các vấn đề sau đây:Hiện AlertDialog từ ViewModel sử dụng MvvmCross
Khi tôi đang cố gắng để hiển thị AlertDialog, mà đã được tạo ra trong ViewModel, các
"Ngoại lệ không khớp: Android.Views.WindowManagerBadTokenException" xuất hiện.
public class MyViewModel : MvxViewModel
{
public ICommand ShowAlertCommand { get; private set; }
public AuthorizationViewModel()
{
ShowAlertCommand = new MvxCommand(() =>
{
var adb = new AlertDialog.Builder(Application.Context);
adb.SetTitle("Title here");
adb.SetMessage("Message here");
adb.SetIcon(Resource.Drawable.Icon);
adb.SetPositiveButton("OK", (sender, args) => { /* some logic */});
adb.SetNegativeButton("Cancel", (sender, args) => { /* close alertDialog */});
adb.Create().Show();
});
}
}
Khi tôi researching Tôi đã phát hiện ra rằng nó sẽ xảy ra vì truyền tham chiếu đến bối cảnh nhưng không phải trên các hoạt động trong các AlertDialog.Builder.
Trong this topic tôi thấy quyết định sau đây: Nhận tài liệu tham khảo cho các Hoạt động hiện tại thông qua việc sử dụng các GetService(), nhưng tôi đã không tìm thấy plugin mvvmcross cho công việc với IMvxServiceConsumer, giao diện IMvxAndroidCurrentTopActivity.
Câu hỏi của tôi là tôi có thể hiển thị AlertDialog từ ViewModel không? Và làm thế nào tôi có thể nhận được tham chiếu đến Hoạt động, nhưng không phải cho Application.Context? Và cách chính xác để đóng AlertDialog mà người dùng sẽ ở trên Chế độ xem hiện tại là gì?
Ok, tôi đang thử công cụ này :) –
Tôi đồng ý rằng làm việc với giao diện người dùng từ VM không phải là "Phong thủy";) nhưng nền tảng WinPhone và iPhone đã khởi chạy và tôi chỉ cần trong Android phiên bản ứng dụng của tôi. Trong tương lai, trong các dự án mới của tôi, tôi nhất thiết sẽ phát triển theo các hộp MVVM :) –
Stuart, một câu hỏi ngắn về 'IMvxAndroidCurrentTopActivity': Nó sẽ luôn luôn là cùng một ví dụ, ngay cả khi hoạt động hàng đầu hiện tại thay đổi? Bối cảnh: Tôi không phải là một fan hâm mộ của vị trí dịch vụ, thay vào đó các lớp học của tôi có sự phụ thuộc rõ ràng. Nó có hoạt động nếu một lớp singleton của tôi có sự phụ thuộc của hàm khởi tạo trên 'IMvxAndroidCurrentTopActivity' và nó vẫn có thể hoạt động trên hoạt động hiện tại không? –