gpt4 book ai didi

android-intent - 无法从渲染器覆盖 OnActivityResult

转载 作者:行者123 更新时间:2023-12-01 23:53:38 25 4
gpt4 key购买 nike

我正在创建一个渲染器以从 Xamarin.Forms 应用程序打开 native Android Activity 。在我的渲染器中,我有;

public class CaptureBarcodeRenderer : PageRenderer
{
private Activity _activity;

protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
{
base.OnElementChanged(e);

_activity = Context as Activity;

Intent intent = new Intent(_activity, typeof(CaptureBarcode));

_activity.StartActivityForResult(intent, 0);
//activity.StartActivity(intent);
}
}

我正在使用 xamarin-forms-samples 中的示例去做这个。从我正在启动的 Activity 中可以明显看出,我正在捕获条形码。不幸的是,我无法通知打开此 Activity 的页面已捕获条形码。如果我可以使用结果,我可以通知调用页面(因为我可以在这里访问它)我们已经进行了扫描,然后从那里调用 PopAsync()。

因为调用页面是一个 ContentPage,我无法将它作为数据的一部分传递给 Intent,因为它不可序列化。

问题当 OnActivityResult 存在于 Context 中并且我无法覆盖它的方法或订阅事件时,我该如何处理它。

我想打开结果的 Activity ,当我得到 Activity 结果时,我想关闭我已经启动的条形码 Activity 并将页面从导航堆栈中弹出。

有什么帮助吗?

最佳答案

我确实有这个工作,但我对它的工作方式并不十分满意。

在我的 MainActivity 类中,我创建了一个静态属性 (BarcodeView),代表表单端的页面。在我的自定义渲染器中,我将此变量设置为 e.NewProperty 值。

在我的 MainActivity 中我覆盖了 OnActivityResult

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);

if (resultCode == Result.Ok)
BarcodeView.DoScan(data.GetStringExtra("code"));
}

现在,当我扫描时,这个方法被命中。在 Scan Activity 中,我完成 () View ,然后当我得到我的 DoScan() 时,我弹出导航以摆脱自定义渲染器 View 。

关于android-intent - 无法从渲染器覆盖 OnActivityResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25228836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com