从任何地方调用Activity类提供的函数

时间:2013-01-05 09:30:26

标签: android android-layout android-intent android-activity

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

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

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

结论:

将Context传递给目标类。但是,要访问某些函数,需要将传递的Context类型转换为Activity。

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

感谢。

2 个答案:

答案 0 :(得分:2)

虽然我没有找到任何明确说明原因的文档,但在我需要执行此操作的所有情况下,只需传递Activity的{​​{1}}即可。

对于传入任何函数的名为Context的{​​{1}},以下内容将允许您访问所需的这些成员函数:

Context

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

contextActivity

通过使用,您可以随时访问这些((Activity) contextActivity).<anyMemberFunction> 成员函数:

Activity myActivity = (Activity) contextActivity;

正如我所提到的,我从来没有发现任何不起作用的情况,也没有任何可靠的文件说这将永远有效。这是我见过的一贯使用的技巧。如果有人要添加更多内容,请执行此操作。

答案 1 :(得分:1)

对于Ex

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 
   }
}