2013-05-07 15 views
5

Mam widok szablonu, który wygląda;Nadmuchany widok nie łapie zdarzenia 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" /> 

Tworzę ten widok programowo, a następnie Dodaję ten wgląd ViewFlipper jako podobne;

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

Również moja działalność ma funkcję publiczną jako podobne;

activity_main.java

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

po naciśnięciu przycisku btnCreateView z pierwszym zdaniem to z powodzeniem tworzenia szablonu (myView), a następnie dodanie go do ViewFlipper. Kiedy klikam btnMultiple, pojawia się błąd i moja aplikacja ulega awarii; "Nie można znaleźć metody btnMultiple_clicked (View) w klasie aktywności android.app.Aplikacja dla programu obsługi onClick w klasie widoku android.widget.Button o identyfikatorze 'btnMultiple'" Jestem pewien, że istnieje istniejąca metoda btnMultiple_clicked (Widok).

PS! Jeśli programistycznie dodaję program nasłuchujący do btnMultiple, to zadziała, ale zastanawiam się, dlaczego "android: onClick =" btnMultiple_clicked "" nie działa?

Odpowiedz

5

Android szuka metody zdefiniowanej w atrybucie onClick w Activity. Problem w twoim kodzie polega na tym, że użyłeś do inicjacji , a nie Context z Activity, więc metoda nie zostanie tam znaleziona (Context jest przekazywana do View). Użyj:

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

lub innego odniesienia, które wskazuje na Activity, gdzie te przyciski będą używane. To jest dobry przykład, dlaczego powinieneś używać w większości przypadków Context z Activity.

+0

Och, mam to, dziękuję za pomoc. To działa jak urok. –

Powiązane problemy