【问题标题】:Forms.Context is obsolete so how should I get Activity of my single activity application?Forms.Context 已过时,那么我应该如何获取单个活动应用程序的活动?
【发布时间】:2018-07-10 06:47:57
【问题描述】:

现在我用这个:

var activity = (Activity)Forms.Context;

但是我应该改用什么呢?

根据此处接受的答案,我应该使用Android.App.Application.ContextXamarin.Forms: Forms.Context is obsolete

但我无法将其转换为 Activity

这里有什么解决方法吗?

UPD:我需要它从库中关闭应用程序。

【问题讨论】:

  • 没有任何上下文来说明您使用该代码的位置很难直接回答,但您可以使用 CurrentActivityPlugin,它肯定是一个 hack,但它确实有效...github.com/jamesmontemagno/CurrentActivityPlugin
  • 已添加到问题中。
  • need it for library to close application 所以它是一个Xamirin.Android,但它并没有真正详细说明该库中实例化对象的方式/谁/在哪里,您可以将 Activity 内容传递给构造函数吗?方法上的附加参数,该库中是否有任何可见的 View/ViewGroup 子类正在显示,因此您可以使用 View 的上下文等...
  • @SushiHangover,它并不暗示有任何 UI 部分的代码,也不包含 Activity 的实例。

标签: android xamarin android-activity


【解决方案1】:

解决方案一: 使用 CurrentActivityPlugin 库。正确设置后:

var activity = CrossCurrentActivity.Current.Activity;

解决方案二: 在 MainActivity 类中定义一个静态实例:

public class MainActivity : FormsAppCompatActivity
{
    public static FormsAppCompatActivity Instance { get; private set; }

    protected override void OnCreate(Bundle bundle)
    {
        Instance = this;

        //other codes
    }
}

然后像这样使用它:

var activity = MainActivity.Instance;

注意:显然我们应该在应用程序的入口点是 MainActivity 时使用方案二,而不是后台服务、广播接收器等其他入口点,否则 MainActivity.Instance 可能为 null。对于这些情况,我们可以使用解决方案一,也可以在这些入口点中定义一个静态实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    相关资源
    最近更新 更多