Implementint View.isInEditMode()

时间:2014-12-21 16:56:47

标签: java android android-studio

我最近从CyanogenMod项目分叉Apollo进行实验,这个应用程序主要使用自定义视图进行主题化。我使用AndroidStudio这个IDE需要自定义视图来实现View.isInEditMode()方法以在编辑布局时绕过上下文加载。

所以我有这样的事情:

public class CustomButton extends ImageButton
    implements OnClickListener, OnLongClickListener {

private final SomeUtililtyClass mResources;

public CustomButton(final Context context, final AttributeSet attrs) {
    super(context, attrs);
    // Handle editing layout from IDE
    if(!isInEditMode()) {
        mResources = new SomeUtililtyClass(context);
        // do more stuff
    }
    // some methods
}

问题是我有一些使用mResources的方法并不总是初始化,这给我一个Java编译器错误。 有一种标准的方法来处理这个问题,还是应该将mResources初始化为null或空对象? 删除最终的修饰符是必要的吗?

1 个答案:

答案 0 :(得分:0)

这不是一种标准的方法或技巧,它取决于你。

当您的类在IDE下实例化(该类实际执行)时,

View.isInEditMode()返回true,因此它是运行时方法而不是编译器已知值。

如果你提议,初始化为null并删除final会这样做,看起来很简单。或者,如果你想保留final关键字,你可以传递NULL SomeUtilityClass构造函数的isInEditMode()上下文if (isInEditMode()) return; 并使其返回而不执行冲突操作

根据我的经验,通常在构造函数的第一行中进行

onDraw

足以满足大多数课程的需要。但是,如果您的课程执行自定义绘图(draw / dispatchDraw / {{1}}),您也需要在那里查看。

目前Eclipse似乎没有处理点击处理程序,但这可能在将来发生变化。