2013-05-07 23 views
5

Ho una vista modello simile;La visualizzazione gonfiata non si attiva. Evento Click

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" /> 

Sto creando questo punto di vista di programmazione e quindi sto aggiungendo questa Altri in ViewFlipper come simili;

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. } 

Anche la mia attività ha la funzione pubblica come simili;

activity_main.java

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

quando si preme il pulsante btnCreateView dal primo punto di vista è di creare con successo modello (myView) e poi aggiungendo in ViewFlipper. Quando scatto btnMultiple sto ricevendo un errore e la mia applicazione si blocca; "Impossibile trovare un metodo btnMultiple_clicked (View) nella classe di attività android.app.Application per il gestore onClick sulla classe di visualizzazione android.widget.Button con id 'btnMultiple'" sono sicuro che esiste il metodo btnMultiple_clicked (View).

PS! Se aggiungo listener a btnMultiple a livello di codice funzionerà, ma mi chiedo perché "android: onClick =" btnMultiple_clicked "" non funziona?

risposta

5

Android cerca il metodo definito nell'attributo onClick nello Activity. Il problema nel codice è che è stato utilizzato per l'inizializzazione LayoutInflaterApplicationContext e non Context dello Activity in modo che il metodo non venga trovato lì (lo Context viene passato a View). Utilizzare:

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

o qualsiasi altro riferimento che punta al Activity dove verranno utilizzati questi pulsanti. Questo è un buon esempio perché nella maggior parte dei casi è necessario utilizzare Context di Activity.

+0

Oh capito, grazie per il vostro aiuto. Esso funziona magicamente. –