Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Implementint View.isInEditMode()_Java_Android_Android Studio - Fatal编程技术网

Java Implementint 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

我最近从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还是空对象?
是否有必要删除最终修改器?

实际上没有标准的方法或技巧,这取决于您

View.isInEditMode()
在IDE下实例化类时返回true(该类实际执行),因此它是一个运行时方法,而不是编译器已知的值

在您建议的情况下,初始化为
null
并删除
final
似乎很简单。或者,如果希望保留
final
关键字,可以将
NULL
上下文传递给
SomeUtilityClass
构造函数(如果
isInEditMode()
),并使其在不执行冲突操作的情况下返回

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

if (isInEditMode()) return;
这对大多数班级来说已经足够了。但是如果您的类进行自定义绘图(
onDraw
/
draw
/
dispatchDraw
),您也需要在那里检查它

目前,Eclipse似乎没有处理单击处理程序,但将来可能会发生变化