【发布时间】:2014-11-16 16:29:00
【问题描述】:
我正在开发一个非常简单的自定义视图,我的视图只是扩展了视图,并且有一个绘图方法
public class MyView extends View ;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
System.out.println("CONTEXT!!! "+context);
}
@Override
public void draw (Canvas canvas){
...
}
XML 定义是:
<com.mycode.MyView
android:id="@+id/overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
Android 正确地尝试实例化该类,并按预期调用绘图...不幸的是,在绘图方法中,上下文为空。所以我把 system.out.println 放在构造函数中,以查看上下文在实例化时不为空......但那条线永远不会被击中......那是怎么回事?我是否处于某个我不理解 Android 可能在完成创建上下文之前调用 draw 的生命周期中?在这种情况下,我怎么能让 Context 不为 null 呢?
我不明白视图如何被实例化/膨胀到调用 draw 方法的程度,但没有上下文。
任何帮助将不胜感激。
【问题讨论】:
-
很难说发生了什么。 Activity 或 Fragment 中的布局是否以某种方式膨胀?能发一下抽奖的内容吗?
-
你可以尝试添加默认构造函数
public MyView(Context context)然后在你的2个构造函数中添加一个断点。 -
xml里面定义了一个fragment,但是myview不是任何fragment的一部分,直接定义在activity_xml中至于draw,内容真的无所谓,第一行draw 是 context.getResources() 失败,因为 context 是 NULL。
-
@VincentD 添加 MyView(Context context) 不会导致任何变化,它不会被调用并且 context 仍然为空。
-
@user282172 你看到我的回答了吗?
标签: android view android-custom-view android-context