2013-05-07 12 views
5

私はそれが見えるテンプレートビューを持っています。膨らんだビューはonClickイベントをキャッチしません

template.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/contentLayout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/view_background" 
android:gravity="center_vertical" 
tools:context=".MainActivity" > 

<Button 
    android:id="@+id/btnMultiple" 
    android:layout_width="0dp" 
    android:layout_height="150dp" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="5dp" 
    android:layout_weight="1" 
    android:background="@drawable/button_backgroundblue" 
    android:onClick="btnMultiple_clicked" 
    android:tag="4" 
    android:text="@string/mc_abcd" 
    android:textColor="@drawable/button_textcolor" 
    android:textSize="@dimen/h2" /> 

私はプログラム的にこのビューを作成していますし、私が好きなようにViewFlipperには、このビューを追加しています。

activity_main.java

public void btnCreateView_clicked(View view) { 
    ViewFlipper viewFlipper = (ViewFlipper)findViewById(R.id.flipper); 

    View myView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.template, viewFlipper, false); 
    viewFlipper.addView(myView); 
    viewFlipper.showNext(); // Showing lastly created myView successfully. } 

また、私の活動は、などの公共の機能を持っています。

activity_main.java

public void btnMultiple_clicked(View view) { 
     //Save the world ! 
} 

私は最初のビューからbtnCreateViewボタンを押すと、それが成功したテンプレート(MYVIEW)を作成し、その後ViewFlipperにそれを追加しています。 btnMultipleをクリックするとエラーが発生し、アプリケーションがクラッシュします。 "アクティビティクラスでメソッドbtnMultiple_clicked(View)を見つけることができませんでした。ビュークラスonroidハンドラのandroid.app.Application id 'btnMultiple'を持つandroid.widget.Button"既存のメソッドbtnMultiple_clicked(View)が存在します。

PS!もし私がbtnMultipleにリスナーをプログラムで追加すると、うまくいくが、なぜ "android:onClick =" btnMultiple_clicked ""はうまくいかないのだろうか?

答えて

5

onClick属性で定義されているメソッドを探します(Activity)。あなたのコードでの問題は、のContextのの初期化に使用されていて、ContextActivityではなく、その方法が見つからないためです(ContextViewに渡されます)。

View myView = LayoutInflater.from(this).inflate(R.layout.template, viewFlipper, false); 

またはこれらのボタンが使用されるActivityを指す他の参照を使用してください。 これは、ほとんどの場合ContextActivityを使用すべき理由の良い例です。

+0

ご連絡ありがとうございます。それは魅力のように働く。 –

関連する問題