He una TextView personalizada que implementa los tres Ver constructores (nb, este es mi primer intento de una aplicación para Android):La implementación ampliada/encargo Ver tiros NoSuchMethod para el constructor
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);
}
Esto es un no-estático clase interna, ya que necesita acceder a datos de instancia desde la clase externa. Aparece en un diseño .xml:
<view class="cogdis.chalkboard.DisplayText$DynamicGeometryTextView"
android:id="@+id/chalkboard"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Todo compila e instala bien, pero en tiempo de ejecución:
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
Para mi ojo, esto implica que no puede encontrar el (Contexto, AttributeSet) versión del constructor ... pero existe. He visto algunas otras publicaciones de SO, como Android Custom View Constructor, todo esto apunta a la misma conclusión (a mi juicio) y leí la Guía de la API en componentes personalizados repetidamente, pero me he quedado perplejo con esto por más de una hora.
¿Alguien tiene alguna idea? ¿Hay alguna manera de depurar esto más?
para la posteridad, es decir., Cualquier persona nueva en este como yo, las clases internas no estáticos son un no-go si se hace referencia a su costumbre Vista en un diseño de XML, pero si lo crea mediante programación, puede funcionar , por ejemplo:
LayoutInflater lif = getLayoutInflater();
ViewGroup layout = (ViewGroup)lif.inflate(R.layout.board, null);
tv = new DynamicGeometryTextView(this);
layout.addView((View)tv);
En este caso, solo necesita hacer coincidir los constructores que realmente usa. Los parámetros de diseño (WRAP_CONTENT, etc.) se pueden establecer en el constructor a través del setLayoutParams()
que se hereda de la Vista.
Sólo para reducir la causa, puede eliminar las referencias a la clase externa y hacer que tu clase TextView estética? –
@ DheerajV.S .: Sí, y de hecho eso resuelve el problema:/ – delicateLatticeworkFever