OnActivityResult Android 未触发
OnActivityResult Android is not triggered
我在使用 Xamarin.Android 时遇到问题,当时我扫描了一个包含一些产品信息的二维码并启动了一个 activity (StartActivityForResult
) 用于借用并完成另一个 activity,它不会触发 OnActivityResult
。
当我开始 activity:
scannerButton.Click += async delegate
{
MobileBarcodeScanner.Initialize(Application);
var scanner = new MobileBarcodeScanner();
var qrValue = await scanner.Scan();
if (qrValue != null)
{
string[] infosProduct = qrValue.Text.Split(',');
ProgressDialog progress = new ProgressDialog(this);
progress.SetMessage("En cour...");
progress.SetTitle("Vérification du statut de l'objet");
progress.SetProgressStyle(ProgressDialogStyle.Spinner);
progress.SetCancelable(false);
progress.Show();
bool? borrowed = DbManager.getInstance().isProductBorrowed(Convert.ToInt32(infosProduct[0]));
progress.Dismiss();
if (borrowed == true)
{
Toast.MakeText(this, "todo : rendre produit", ToastLength.Long).Show();
}
else if (borrowed == false)
{
Intent intent = new Intent(this, typeof(BorrowActivity));
intent.PutExtra("user", settings.GetString("user", ""));
intent.PutExtra("infosProduct", infosProduct);
StartActivityForResult(intent,0);
}
}
};
onResult
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (resultCode == Result.Ok)
{
// TODO Refresh
Toast.MakeText(this, "test", ToastLength.Long).Show();
}
}
当我发送结果时:
borrowButton.Click += delegate {
Intent intent = new Intent(this, typeof(MenuActivity));
SetResult(Result.Ok, intent);
Finish();
}
尝试在 activity 中更改:
Intent intent = new Intent(this, typeof(BorrowActivity));
到
Intent intent = new Intent(this,
typeof(BorrowActivity)).SetFlags(ActivityFlags.ReorderToFront);
如果它没有帮助,我不知道。我有类似的问题。
在我的情况下,xamarin 或 visual studio 的最新更新可能会导致问题,因为在三台计算机中的一台中,相同的代码可以完美运行并且该计算机仍未更新。
问题已解决,问题是我的 "OnActivityResult" 所在的 Activiy 没有参数 "MainLauncher = true",或者它只是通过重新创建项目来解决。我也使用了@Justinas 的答案,但它仅在我重新创建项目并使用参数时有效。所以我真的不知道它为什么有效,但它有效 c:
我在使用 Xamarin.Android 时遇到问题,当时我扫描了一个包含一些产品信息的二维码并启动了一个 activity (StartActivityForResult
) 用于借用并完成另一个 activity,它不会触发 OnActivityResult
。
当我开始 activity:
scannerButton.Click += async delegate
{
MobileBarcodeScanner.Initialize(Application);
var scanner = new MobileBarcodeScanner();
var qrValue = await scanner.Scan();
if (qrValue != null)
{
string[] infosProduct = qrValue.Text.Split(',');
ProgressDialog progress = new ProgressDialog(this);
progress.SetMessage("En cour...");
progress.SetTitle("Vérification du statut de l'objet");
progress.SetProgressStyle(ProgressDialogStyle.Spinner);
progress.SetCancelable(false);
progress.Show();
bool? borrowed = DbManager.getInstance().isProductBorrowed(Convert.ToInt32(infosProduct[0]));
progress.Dismiss();
if (borrowed == true)
{
Toast.MakeText(this, "todo : rendre produit", ToastLength.Long).Show();
}
else if (borrowed == false)
{
Intent intent = new Intent(this, typeof(BorrowActivity));
intent.PutExtra("user", settings.GetString("user", ""));
intent.PutExtra("infosProduct", infosProduct);
StartActivityForResult(intent,0);
}
}
};
onResult
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (resultCode == Result.Ok)
{
// TODO Refresh
Toast.MakeText(this, "test", ToastLength.Long).Show();
}
}
当我发送结果时:
borrowButton.Click += delegate {
Intent intent = new Intent(this, typeof(MenuActivity));
SetResult(Result.Ok, intent);
Finish();
}
尝试在 activity 中更改:
Intent intent = new Intent(this, typeof(BorrowActivity));
到
Intent intent = new Intent(this, typeof(BorrowActivity)).SetFlags(ActivityFlags.ReorderToFront);
如果它没有帮助,我不知道。我有类似的问题。 在我的情况下,xamarin 或 visual studio 的最新更新可能会导致问题,因为在三台计算机中的一台中,相同的代码可以完美运行并且该计算机仍未更新。
问题已解决,问题是我的 "OnActivityResult" 所在的 Activiy 没有参数 "MainLauncher = true",或者它只是通过重新创建项目来解决。我也使用了@Justinas 的答案,但它仅在我重新创建项目并使用参数时有效。所以我真的不知道它为什么有效,但它有效 c: