public class DynamicGeometryTextVIEw extends TextVIEw { public DynamicGeometryTextVIEw (Context con) { super(con); } public DynamicGeometryTextVIEw (Context con,AttributeSet attrs) { super(con,attrs); } public DynamicGeometryTextVIEw (Context con,AttributeSet attrs,int style) { super(con,attrs,style); }
这是一个非静态内部类,因为它需要从外部类访问实例数据.它出现在.xml布局中:
<vIEw androID:ID="@+ID/chalkboard" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" />
一切都编译和安装很好,但在运行时:
Caused by: androID.vIEw.InflateException: Binary XML file line #7: Error inflating class cogdis.chalkboard.displayText$DynamicGeometryTextVIEw at androID.vIEw.LayoutInflater.createVIEw(LayoutInflater.java:596) at androID.vIEw.LayoutInflater.createVIEwFromTag(LayoutInflater.java:687) at androID.vIEw.LayoutInflater.rInflate(LayoutInflater.java:746) at androID.vIEw.LayoutInflater.inflate(LayoutInflater.java:489) at androID.vIEw.LayoutInflater.inflate(LayoutInflater.java:396) at androID.vIEw.LayoutInflater.inflate(LayoutInflater.java:352) at com.androID.internal.policy.impl.PhoneWindow.setContentVIEw(PhoneWindow.java:256) at androID.app.Activity.setContentVIEw(Activity.java:1867) at cogdis.chalkboard.displayText.onCreate(displayText.java:26) at androID.app.Activity.performCreate(Activity.java:5008) at androID.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2023) ... 11 more Caused by: java.lang.NoSuchMethodException: <init> [class androID.content.Context,interface androID.util.AttributeSet] at java.lang.class.getConstructorOrMethod(Class.java:460) at java.lang.class.getConstructor(Class.java:431) at androID.vIEw.LayoutInflater.createVIEw(LayoutInflater.java:561) ... 22 more
在我看来,这意味着它无法找到构造函数的(Context,AttributeSet)版本……但它存在.我看了一些其他的SO帖子,比如Android Custom View Constructor,这一切都指向了相同的结论(我的眼睛),并反复阅读自定义组件的API指南,但我已经被这个问题困扰了一个多小时.
有人有主意吗?有没有办法进一步调试?
对于像我这样的新手来说,如果你的自定义视图在XML布局中被引用,那么非静态内部类是不行的,但是如果你以编程方式创建它,它可以工作,例如:
LayoutInflater lif = getLayoutInflater(); VIEwGroup layout = (VIEwGroup)lif.inflate(R.layout.board,null); tv = new DynamicGeometryTextVIEw(this); layout.addVIEw((VIEw)tv);
在这种情况下,您只需要匹配实际使用的构造函数.可以通过从VIEw继承的setLayoutParams()在构造函数中设置布局参数(WRAP_CONTENT等).
解决方法 无法实例化非静态内部类 without reference to an instance of the outer class.OuterClass.InnerClass innerObject = outerObject.new InnerClass();
所以这可能是布局填充无法给你的课堂膨胀的原因.删除对外部类成员的引用后,使您的类保持静态.
总结以上是内存溢出为你收集整理的android – 实现扩展/自定义View为构造函数抛出NoSuchMethod全部内容,希望文章能够帮你解决android – 实现扩展/自定义View为构造函数抛出NoSuchMethod所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)