【问题标题】:Detect if context is from activity or adapter检测上下文是否来自活动或适配器
【发布时间】:2014-06-05 08:06:01
【问题描述】:

是否有能力检测上下文是来自活动还是适配器?

检测我们是否可以做到这一点很重要

(Activity(context)).startActivityForResult(..) ...

【问题讨论】:

  • “来自适配器的上下文”是什么意思?活动是上下文,但适配器不是上下文。创建适配器时,您将上下文传递给它。你传递了什么上下文?
  • 是的,来自文档:“有关应用程序环境的全局信息的接口。这是一个抽象类,其实现由 Android 系统提供。它还允许访问特定于应用程序的资源和类作为对应用程序级操作的调用,例如启动活动、广播和接收意图等。” .但是如果它是全局的,为什么我们需要做 (Activity(context)),而不是仅仅在上下文 (?) 上调用方法。
  • 是的,它是全局的,您可以从任何上下文(服务、应用程序、活动等)启动活动和服务。因此,您不能从上下文中 startActivityForResult。实际上只能从活动中调用它(此方法定义在活动类中,而不是在上下文类中)。之所以如此,是因为您的 activityA(调用 startActivityForResult)将得到它的结果。例如,不可能从 Service 调用它,因为 Service 不知道任何活动生命周期。因此,您需要在活动上调用 startActivityForResult,而不是在上下文上。或者你可以在ctx中调用StartActivity()
  • @Jaś:你在哪里接触到这个?如果您回复将不胜感激:)

标签: java android android-activity android-context onactivityresult


【解决方案1】:

你可以试试

if(context instanceof Activity)
     (Activity(context)).startActivityForResult(..);

这应该可行。

【讨论】:

    【解决方案2】:

    适配器的构造函数

    public YourAdapter(Context context) {
        this.context = context;
    }
    

    当你在活动中调用它时

     adapter = new YourAdapter(YourActivity.this);
    

    所以你的适配器中有上下文。

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多