关于error inflating class

来源:互联网 发布:mac ppt软件 编辑:程序博客网 时间:2024/05/17 13:09

上周在写程序界面的时候,因为需要自己创建新的View类,所以就按照需要自己写了View,然后再将自己新建的View加到mainXML中,这样就能将整个界面都放到main中来表达。当最后,主程序、新建的View类和main都搞定,不报错后,我就开始在VM上跑这个程序,结果发现竟然是意外终止,forceclose。

这样的问题我是第一次碰到,程序中似乎没问题,但就是跑不起来,我还一度以为是VM出问题了,还用自己手机跑过,发现还是一样的问题。于是我就调出LogCat看,发现指出的是一个指向XML的errorinflatingclass错误。于是我就上网搜索,国内外论坛都找过,分析和解决方法千奇百怪。最后是通过在新建的View类中加一个两个元素的构造函数才使得程序正常跑起来。具体方法就是:

//网上论坛指出要加个两个元素的构造方法
public MonitorView(Context context,AttributeSet attrs)
{
super(context,attrs);
setFocusable(true);
}

注意,需要import android.util.AttributeSet;

至于为什么要这么处理,这样处理后为什么程序就跑得起来了,我不知道,希望能有大神看到我的博文后,留言告诉我的why,那就万分感谢了!无论如何,对未来那位能帮我解答疑问的大神,先表达我的谢意!谢谢!

另外,在布局XML中加入自己新建的View的方法如下:

// 出自一本书上的例子

<com.paad.compass.CompassView

  android:id="@+id/compassView"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"/>

虽然网友还有给出不同的方法,如:

<View

 class="..."

/>

这样的形式,但是似乎从我验证的角度来看,书上给出的那种方式比较正确。

在布局XML中加好View节点后,就可以在代码中获得引用了。

另外,在android官方reference中给出的LinearLayouttutorial的例子中的布局似乎是有问题的。因为我按照它的例子布局的话会报错说:

- error: Error parsing XML: not well-formed (invalidtoken)
 - Element type "LinearLayout" must be followed byeither attribute specifications, ">"or"/>"

我查了下,也有网友反映这样的问题,暂时还未找到解决方法,待搞定了再更新给大家做参考!

顺便带一句,晚上准备离开实验室的时候才想起来今天钥匙不见了,怕影响我可爱的室友们休息,就只能一个人窝在实验室凑活一晚了...

原创粉丝点击