Проблема переназначения OnClickListener - Android - PullRequest
1 голос
/ 21 июня 2011

Я сталкиваюсь с проблемой при попытке переназначения OnClickListener.В приведенном ниже коде моя программа запускается методом startWorkout (), и каждый раз, когда нажимается кнопка, она вычисляет, является ли это последним выполнением или нет.Если это последний прогон, он вызывает метод lastSet ().Метод lastSet () должен переназначить кнопку, чтобы она выполняла другое действие, но каждый раз, когда я нажимаю на нее, она выполняет действия, объявленные в методе startWorkout ().

Когда я запускаю ее в режиме отладкипошагово, программа правильно прошла метод lastSet () и назначила слушателя.Но затем он вернулся к методу startWorkout () и переназначил слушателя!Таким образом, к тому времени, когда пользователь нажал на нее, кнопка вернулась к своему первоначальному слушателю, а не к окончательному.

Кто-нибудь знает, почему это происходит?

public  void startWorkout() {
    doSet();
    Button doneButton = (Button)findViewById(R.id.done);
    doneButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            // If this is the last result, calls last(set) instead
            saveResult();
            takeRest(61000, 30000);
        }
    });

}

public void lastSet() {
    // Changes layout (keeps the same button)
    setLayoutTest();
    Button doneButton = (Button)findViewById(R.id.done);
    doneButton.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {
            // Call Finish Methods

        }
    });
}

1 Ответ

1 голос
/ 04 мая 2012

Решено ... Я фактически назначил слушателя дважды ... (решено давным-давно, просто убираю мои вопросы о стековом потоке)

Если вы сделаете это:

doneButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        // If this is the last result, calls last(set) instead
        saveResult();
        takeRest(61000, 30000);
    }
});

и затем это:

doneButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        runMethod2();
    }
});

, тогда будет запущен ТОЛЬКО второй (в данном случае runMethod2 ()).Ошибка новичка, просто обязательно удалите (или перезапишите) любой устаревший код.

...