如何从不扩展Activity的类调用Activity类提供的函数?理论上,是的,如果我不扩展Activity我就不能直接使用它提供的功能。但是,为此提供了解决方法吗?如果没有,是否有这些功能的替代品或替代方式?
例如,
如果我的类扩展了Activity,我可以调用setContentView()
来实例化我的布局xml文件。但是如果我的类扩展了其他类并且没有扩展Activity,那么我可以使用LayoutInflater来完成任务。但是像registerReceiver()
这样的其他功能呢?如何从任何其他类中获取“registerReceiver()
”的功能,显然我不希望每个类都扩展Activity。 “Activity.function_name
”的静态访问也是不可能的,因为这些函数不是静态的。
可以从任何地方访问某些服务。例如,“println()
”或Log.e()
,可以随时随地调用系统函数。其他关键功能有类似的方法吗?
结论:
将Context传递给目标类。但是,要访问某些函数,需要将传递的Context类型转换为Activity。
Changdeo和BT的答案都是正确的。
感谢。
答案 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
}
}