ためNoSuchMethodをスローしますそれは外部クラスからのインスタンスデータにアクセスする必要があるからです。これは、.xmlのレイアウトで表示されます。は、私は3つのビューコンストラクタを実装して、カスタマイズのTextView(Nbは、これがAndroidアプリで私の最初の刺し傷である)きコンストラクタ
<view class="cogdis.chalkboard.DisplayText$DynamicGeometryTextView"
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
私の目には、これは(コンテキスト、属性セット)のバージョンを見つけることができない意味しますコンストラクタの...それが存在します。 Android Custom View Constructorのようないくつかの他の投稿を見てきましたが、これは(私の目に)同じ結論を示しており、カスタムコンポーネントのAPIガイドを繰り返し読んでいますが、これで1時間以上困惑しています。
誰もが考えている?これをさらにデバッグする方法はありますか?
ポスタシーつまり、私のような新しいもので、静的でない内部クラスはカスタムビューがXMLレイアウトで参照されている場合はノー・ゴーですが、プログラムで作成すると動作しますたとえば、
LayoutInflater lif = getLayoutInflater();
ViewGroup layout = (ViewGroup)lif.inflate(R.layout.board, null);
tv = new DynamicGeometryTextView(this);
layout.addView((View)tv);
この場合、実際に使用するコンストラクタと一致する必要があります。レイアウトパラメータ(WRAP_CONTENTなど)は、Viewから継承されたsetLayoutParams()
を介してコンストラクタで設定できます。
ちょうど原因を絞り込むために
static
インナークラスでなければなりませんあなたのTextViewクラスを静的にしますか? –@ DheerajV.S:はい、実際に問題を解決しています:/ – delicateLatticeworkFever