我正在创建一个从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来首先禁用充气。
答案 0 :(得分:1)
转到您的R类文件,找到指向 0x7F030018
的内容<强> 修改 强>
您必须添加
if (!isInEditMode())
{
// Your major LayoutInflater codes goes here
}
在自定义视图的构造函数中。然后它将构建。