我创建了一个自定义视图,并且需要活动参考来执行一些与Handler相关的操作。我知道 getContext()是一种获取上下文的方法,但是有没有办法获得相同的Activity引用?
答案 0 :(得分:30)
将上下文转换为Activity:
应该没问题MyActivity myActivity = (MyActivity) getContext();
答案 1 :(得分:15)
如果未从“活动”上下文调用View,则将getContext()强制转换为Activity(例如(Activity)getContext();)可能无法始终返回Activity对象。
为此,
public Activity getActivity() {
Context context = getContext();
while (context instanceof ContextWrapper) {
if (context instanceof Activity) {
return (Activity)context;
}
context = ((ContextWrapper)context).getBaseContext();
}
return null;
}
"而"用于通过所有基本上下文冒泡,直到找到活动,或者在找到根上下文时退出循环。导致根上下文将具有null baseContext,从而导致循环结束。
答案 2 :(得分:1)
在View类的构造函数中传递上下文,如下所示
查看课程
public class DrawView extends View {
Context actContext;
public DrawView(Context context) {
super(context);
actContext=context;
}
}
并在您的活动类
中DrawView drawView=new DrawView(this);
答案 3 :(得分:0)
您可以通过在定义其对象时在处理程序的构造函数中发送活动的上下文来获取活动引用,并且下面定义了处理程序类中的构造函数定义:
private Context mContext;
public MyHandler(Context context) {
mContext=context;
}
并且在主要活动类中,您可以按如下方式创建其对象:
MyHandler ca=new MyHandler(MainActivity.this);
答案 4 :(得分:0)
我建议使用'活动'而不是使用'上下文'(从上下文中调用Activity并不总是可行,而反之则没有任何问题)。
在您的个人班级中,只需在其构造函数中请求活动作为必填参数=> public void constructorOfTheClass(Activity activity){...}。
当您在Activity中调用构造函数时,只需指出此参数,您就可以直接在类中使用它。