首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在layout/main.xml中引用内部类视图时出错

在layout/main.xml中引用内部类视图时出错
EN

Stack Overflow用户
提问于 2010-01-20 08:44:47
回答 6查看 29.9K关注 0票数 61

Grrr...

我在我的活动中创建了一个视图的子类作为内部类。在我简单地从我的活动链接到这个视图之前:

代码语言:javascript
复制
setContentView(new CustomView(this));

没有问题。

但是,现在我的视图变得越来越复杂,所以我将其作为FrameLayout的一部分,这样我就可以将其作为基础视图,并在其上添加微调窗口小部件。问题是,当我这样做时,我得到一个错误:

代码语言:javascript
复制
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.grafightscratch.ochemmer/com.grafightscratch.ochemmer.MoleculeTablet}: android.view.InflateException: Binary XML file line #4: Error inflating class com.grafightscratch.ochemmer.MoleculeTablet.MoleculeTabletView
...
Caused by: android.view.InflateException: Binary XML file line #4: Error inflating class com.grafightscratch.ochemmer.MoleculeTablet.MoleculeTabletView
...
Caused by: java.lang.ClassNotFoundException: com.grafightscratch.ochemmer.MoleculeTablet.MoleculeTabletView in loader dalvik.system.PathClassLoader@43b74a28

所以-这个视图以前在我直接链接到它的时候是有效的,但是当我试图将它添加到main.xml文件中作为framelayout的一部分时,我得到了上面的错误。我还尝试将其放入布局,仅通过以下方式显示:

代码语言:javascript
复制
<com.grafightscratch.ochemmer.MoleculeTablet.MoleculeTabletView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/molecule_tablet_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>

毫无办法。我一直收到InflateException/ClassNotFoundException错误。它会报错二进制XML文件中的“第3行”,如果它说的是main.xml,那就是我三次检查过的包声明。

编辑我试着让这个视图成为一个单独的类(即--不是一个内部类),它起作用了。经过一番搜索后,我发现一些帖子说xml标签应该是这样的:

代码语言:javascript
复制
<com.grafightscratch.ochemmer.MoleculeTablet$MoleculeTabletView ...>

也就是说,应该使用美元符号来分隔内部类和主类。然而,Eclipse对此深恶痛绝,称其为错误,并拒绝让我使用该角色进行构建或部署。因此,现在的问题变成了:如何引用作为内部类的View?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-01-20 17:01:46

对于内部类,语法变为:

代码语言:javascript
复制
<view class="com.grafightscratch.ochemmer.MoleculeTablet$MoleculeTabletView" />

原因是$是XML标记中的非法字符。

票数 161
EN

Stack Overflow用户

发布于 2011-06-04 09:34:04

我也有同样的问题。但是,XML文件中的语法是正确的。

对我来说,最终解决问题的是内部类需要声明为静态类。例如:

代码语言:javascript
复制
public static class myWebView extends WebView
票数 39
EN

Stack Overflow用户

发布于 2015-03-13 21:57:44

对于内部类:

代码语言:javascript
复制
<view class="{package}.{ParentClass}${innerClass}" />

对于内部类,您必须声明您的类:

代码语言:javascript
复制
public static InnerClass

static是必需的。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2098318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档