2012-07-25 1 views
7

ため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()を介してコンストラクタで設定できます。

+1

ちょうど原因を絞り込むためにstaticインナークラスでなければなりませんあなたのTextViewクラスを静的にしますか? –

+0

@ DheerajV.S:はい、実際に問題を解決しています:/ – delicateLatticeworkFever

答えて

9

非静的内部クラスwithout reference to an instance of the outer classをインスタンス化する方法はありません。

OuterClass.InnerClass innerObject = outerObject.new InnerClass(); 

これは、レイアウトインフレータがあなたのクラスを膨らませなかった原因である可能性があります。外側のクラスメンバーへの参照を削除した後、クラスを静的にします。

+0

!@ $#XMLレイアウトを先に実行してみようと思いますが、結合がたくさんあります。 – delicateLatticeworkFever

9

変更:

public class DynamicGeometryTextView extends TextView { 

へ:

public static class DynamicGeometryTextView extends TextView { 

適切にそれを参照するために、それはあなたが参照を削除することができ、

関連する問題