Android 实现扩展/自定义视图会为构造函数抛出NoSuchMethod
我有一个定制的TextView,它实现了三个视图构造函数(注意,这是我第一次尝试android应用程序): 这是一个非静态的内部类,因为它需要从外部类访问实例数据。它出现在.xml布局中:Android 实现扩展/自定义视图会为构造函数抛出NoSuchMethod,android,Android,我有一个定制的TextView,它实现了三个视图构造函数(注意,这是我第一次尝试android应用程序): 这是一个非静态的内部类,因为它需要从外部类访问实例数据。它出现在.xml布局中: <view class="cogdis.chalkboard.DisplayText$DynamicGeometryTextView" android:id="@+id/chalkboard" android:layout_width="wrap_content" android
<view class="cogdis.chalkboard.DisplayText$DynamicGeometryTextView"
android:id="@+id/chalkboard"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
在这种情况下,您只需要匹配实际使用的构造函数。布局参数(WRAP_CONTENT等)可以通过从视图继承的
setLayoutParams()
在构造函数中设置。无法实例化非静态内部类
因此,这可能是布局充气器无法为类充气的原因。删除对外部类成员的引用后,使类保持静态。更改:
public class DynamicGeometryTextView extends TextView {
致:
为了正确地引用它,它必须是一个
静态的内部类为了缩小原因,您可以删除对外部类的引用并使您的TextView类成为静态的吗?@DheerajV.S:是的,事实上这确实解决了问题:/!@$#我想我将首先尝试在无xml布局的情况下实例化它,因为存在大量耦合。
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
LayoutInflater lif = getLayoutInflater();
ViewGroup layout = (ViewGroup)lif.inflate(R.layout.board, null);
tv = new DynamicGeometryTextView(this);
layout.addView((View)tv);
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
public class DynamicGeometryTextView extends TextView {
public static class DynamicGeometryTextView extends TextView {