在图形设计器内部进行充气时出现NullPointerException

时间:2013-06-27 08:08:08

标签: android nullpointerexception android-custom-view layout-inflater graphical-layout-editor

我正在创建一个从FrameLayout扩展的自定义视图。

在每个CTOR中,我使用LayoutInflater从XML中扩展一些视图,使用类似的东西(在一个名为“init()”的函数中):

final LayoutInflater inflater = LayoutInflater.from(context);
inflater.inflate(R.layout.custom_view, this, true); // <= here there is an NPE 

问题是,即使应用程序使用此代码工作正常,图形设计器仍然无法呈现自定义视图 - 它会在错误日志中继续编写类似这样的内容:

The following classes could not be instantiated:
- com.example.customviewtest.CustomView (Open Class, Show Error Log)
See the Error Log (Window > Show View) for more details.
Tip: Use View.isInEditMode() in your custom views to skip code when shown in Eclipse

android.content.res.Resources$NotFoundException: Could not resolve resource value: 0x7F030018.
    at android.content.res.BridgeResources.throwException(BridgeResources.java:693)
    at android.content.res.BridgeResources.getLayout(BridgeResources.java:271)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
    at com.example.customviewtest.CustomView.init(CustomView .java:38)
    at com.example.customviewtest.CustomView.<init>(CustomView .java:26)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(    at sun.reflect.NativeConstructorAccessorImpl.newInstance(    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(    at java.lang.reflect.Constructor.newInstance(    at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.instantiateClass(ProjectCallback.java:422)
    at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.loadView(ProjectCallback.java:179)
    at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:207)
    at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:135)
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:746)
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:718)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:372)

它似乎有时只发生,我不明白在哪些情况下。这就像真正的代码与图形编辑器不同步。有时它甚至声称我试图将视图转换为完全不同的视图。

我的问题

为什么会发生?这是一个ADT错误吗?

我尝试了多种使用inflater的方法,包括:

getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)

我还尝试对onFinishInflate方法进行充气,但没有任何效果。

似乎很多人都发布了这个问题,但没有人找到解决方案,只是使用isInEditMode来首先禁用充气。

1 个答案:

答案 0 :(得分:1)

转到您的R类文件,找到指向 0x7F030018

的内容

<强> 修改

您必须添加

if (!isInEditMode())
{
   // Your major LayoutInflater codes goes here
}

在自定义视图的构造函数中。然后它将构建。