Java Implementint View.isInEditMode()
我最近从CyanogenMod项目中选择Apollo进行实验,该应用程序主要使用自定义视图进行主题化。我使用的是AndroidStudio,此IDE需要自定义视图来实现View.isInEditMode()方法,以在编辑布局时绕过上下文加载 所以我有这样的想法:Java Implementint View.isInEditMode(),java,android,android-studio,Java,Android,Android Studio,我最近从CyanogenMod项目中选择Apollo进行实验,该应用程序主要使用自定义视图进行主题化。我使用的是AndroidStudio,此IDE需要自定义视图来实现View.isInEditMode()方法,以在编辑布局时绕过上下文加载 所以我有这样的想法: public class CustomButton extends ImageButton implements OnClickListener, OnLongClickListener { private final Som
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还是空对象?
是否有必要删除最终修改器?实际上没有标准的方法或技巧,这取决于您
View.isInEditMode()
在IDE下实例化类时返回true(该类实际执行),因此它是一个运行时方法,而不是编译器已知的值
在您建议的情况下,初始化为null
并删除final
似乎很简单。或者,如果希望保留final
关键字,可以将NULL
上下文传递给SomeUtilityClass
构造函数(如果isInEditMode()
),并使其在不执行冲突操作的情况下返回
根据我的经验,通常在构造函数的第一行中执行
if (isInEditMode()) return;
这对大多数班级来说已经足够了。但是如果您的类进行自定义绘图(onDraw
/draw
/dispatchDraw
),您也需要在那里检查它
目前,Eclipse似乎没有处理单击处理程序,但将来可能会发生变化