1

J'utilise la méthode onClick de la vue .xml pour intercepter les événements click sur ma classe .java.android: onClick = "" provoque IllegalStateException

Fonctionne généralement bien. Mais quand mon activité est en cours d'exécution sur fond pendant longtemps, viendra plus tard à thread principal et quelqu'un clique sur la vue, il retourne l'exception suivante:

java.lang.NullPointerException 
java.lang.IllegalStateException: Could not execute method of the activity 
at android.view.View$1.onClick(View.java:3608) 
at android.view.View.performClick(View.java:4101) 
at android.view.View$PerformClick.run(View.java:17087) 
at android.os.Handler.handleCallback(Handler.java:615) 
at android.os.Handler.dispatchMessage(Handler.java:92) 

Voici mon view.xml:

<ToggleButton 
    android:id="@+id/fragment_main_colonies_tbFollow" 
    android:layout_width="match_parent" 
    android:layout_height="40dp" 
    android:checked="false" 
    android:onClick="onClickToggleColonyFollow" 
    android:textOff="@string/main_colony_follow" 
    android:textOn="@string/main_colony_follow" /> 

Et voici mon fragment.java:

public void onClickToggleColonyFollow(View view) { 
    ToggleButton near = (ToggleButton)getView().findViewById(R.id.fragment_main_colonies_tbNear); 
    ToggleButton follow = (ToggleButton) view; 

    if(follow == null || near == null) return; 

    if(!near.isChecked() && !follow.isChecked()) { 
     follow.setChecked(true); 
     return; 
    } 

    near.setChecked(false); 
    showColoniesNear = false; 
} 

Qu'est-ce que je fais mal? Lorsque vous utilisez l'attribut , il essaie de trouver la méthode via la réflexion.

+0

'ToggleButton près = (ToggleButton) getView(). FindViewById (R.id.fragment_main_colonies_tbNear);' Pourquoi getView ?? – Raghunandan

+0

@Raghunandan parce que c'est un fragment. – Karakuri

+0

Ensuite, 'public void onClickToggleColonyFollow (Voir la vue)' doit être dans Activité non fragment – Raghunandan

Répondre

0

Il n'est pas clair pour moi exactement où il essaie de faire cela, mais il semble ne pas fonctionner tout le temps, peut-être qu'il ne cherche que la méthode dans l'activité à laquelle la vue est attachée. Je préfère toujours définir moi-même explicitement onClickListener avec view.setOnClickListener()

Questions connexes