Прежде всего, я использую Xamarin с MvvmCross.Действие Android уничтожено при вызове сканера штрих-кода ZXing. Как восстановить?
В моей ViewModel, я использую класс ZXing MobileBarcodeScanner
для сканирования штрих-кода, когда пользователь нажимает на кнопку:
var scanner = new MobileBarcodeScanner();
var result = await scanner.Scan();
if (result != null)
{
CodigoProduto = result.Text;
InternalPesquisarProduto();
}
После сканирования, я запустить InternalPesquisarProduto
пустота, которая выбирает только для данных в удаленный сервер, конечно, на штрихкоде, который был прочитан. Этот метод, а также отображать некоторые загрузки сообщения в то время как данные извлекаются:
Ui.DisplayLoading("Searching...", "Searching data");
// Code that fetchs the data
Ui.DismissLoading();
Ui
это свойство на моем ViewModel определяется следующим образом:
protected IUiInteractor Ui { get; set; }
Я получаю его с помощью инъекции зависимостей. Вот соответствующий код от использования неоспоримой реализации в этом сценарии:
public class AndroidUiInteractor : IUiInteractor
{
private IMvxAndroidCurrentTopActivity _mvxCurrentTopActivity;
public AndroidUiInteractor(IMvxAndroidCurrentTopActivity mvxCurrentTopActivity)
{
_mvxCurrentTopActivity = mvxCurrentTopActivity;
}
public void DisplayLoading(string title, string message)
{
_mvxCurrentTopActivity.Activity.RunOnUiThread(() =>
{
_progressDlg = new ProgressDialog(_mvxCurrentTopActivity.Activity);
// Configuring the title and the message
_progressDlg.Show();
});
}
}
Проблема заключается в том, что, когда scanner.Scan
называется, моя деятельность Вызывающей разрушаются, поэтому, когда я называю Ui.DisplayLoading
, то _mvxCurrentTopActivity.Activity
является null
.
Что является самым странным в этом случае, так это то, что у меня есть два Samsung с Android 5.0 API 21, которые я использую в своих тестах, и эта проблема возникает только в одном из них, с другой стороны, активность не прерывается, когда вызывая scanner.Scan
.
Примечание: Извините за что-то не так в коде, но из-за политики компании я могу получить доступ к Интернету только через Terminal Service, а Ctrl + V отключен.
Почему бы не сначала вернуться к предыдущей операции перед вызовом 'InternalPesquisarProduto'? – pnavk