0

如何从不扩展 Activity 的类中调用 Activity 类提供的功能?理论上,是的,如果我不扩展 Activity 我不能直接使用它提供的功能。但是是否为此提供了解决方法?如果没有,这些功能是否有替代品或替代方法?

例如,如果我的类扩展了 Activity,我可以调用setContentView()以实例化我的布局 xml 文件。但是如果我的类扩展了其他一些类并且没有扩展 Activity,那么我可以使用 LayoutInflater 来完成任务。但是其他功能registerReceiver()呢?我如何registerReceiver()从任何其他类中获得 '' 的功能,显然我不希望每个这样的类都扩展 Activity。通过“”进行静态访问Activity.function_name也是不可能的,因为这些函数不是静态的。

某些服务可以从任何地方访问。例如 ' println()' 或Log.e(), 系统函数可以在需要时从任何地方调用。其他关键功能是否有类似的方法?

结论:

将上下文传递给目标类。然而,为了访问某些函数,需要将传递的 Context 类型转换为 Activity。

Changdeo和BT的答案都是正确的。

谢谢。

4

2 回答 2

2

尽管我没有找到任何明确说明原因的文档,但在我曾经需要这样做的每种情况下,只需传递Activity'sContext就足够了。

对于传递给任何函数的Context调用contextActivity,以下将允许访问您需要的这些成员函数:

((Activity) contextActivity).<anyMemberFunction>

或者,如果您在多种情况下都需要这些功能,那么执行以下操作可能是最简单的:

Activity myActivity = (Activity) contextActivity;

从那里您可以随时使用以下方法访问这些Activity成员函数:

myActivity.<desiredFunction>;

正如我所提到的,我从未发现任何这种方法不起作用的情况,但也没有可靠的文档说明这将始终有效。这是我看到的一贯使用的技巧。如果有人有更多要补充的,请做。

于 2013-01-05T09:44:46.510 回答
1

对于前

Class XYZActivity extends Activity
{
   ......
    ......
    MyClass myClass = new MyClass(this);
    // OR you can pass just context
    // MyClass myClass = new MyClass(getContext());
}

Class MyClass
{
  Context context;
  Myclass(Context context)
  {
   this.context = context;
   context.registe....//Or any function 
   }
}
于 2013-01-05T09:36:08.973 回答