android:onClick= причинява IllegalStateException

Използвам метода onClick на .xml изглед, за да уловя събитията при щракване в моя .java клас.

Обикновено работи добре. Но когато моята активност се изпълнява на заден план за дълго време, по-късно се стига до основната нишка и някой щраква върху изгледа, той връща следното изключение:

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)

Ето моя 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" />

И ето моят 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;
}

Какво правя грешно?


person cpalosrejano    schedule 02.05.2014    source източник
comment
ToggleButton near = (ToggleButton)getView().findViewById(R.id.fragment_main_colonies_tbNear); защо getView??   -  person Raghunandan    schedule 02.05.2014
comment
@Raghunandan, защото е фрагмент.   -  person Karakuri    schedule 02.05.2014
comment
Тогава public void onClickToggleColonyFollow(View view) трябва да е в Дейност, а не във Фрагмент   -  person Raghunandan    schedule 02.05.2014
comment
Моята дейност делегира събитието на фрагмента.   -  person cpalosrejano    schedule 02.05.2014
comment
@cpalosrejano трябва да имате този метод в Activity. или можете да инициализирате използването на бутона button.setOnClickListener във фрагмент и да се отървете от android:onClick="onClickToggleColonyFollow"   -  person Raghunandan    schedule 02.05.2014


Отговори (1)


Когато използвате атрибута android:onClick, той се опитва да намери метода чрез отражение. Не ми е ясно къде точно се опитва да направи това, но изглежда не работи през цялото време, може би само търси метода в дейността, към която е прикрепен изгледът. Винаги предпочитам сам изрично да задавам onClickListener с view.setOnClickListener()

person Karakuri    schedule 02.05.2014