Атрибут onClick в XML, ссылающийся на метод в классе Activity - PullRequest
1 голос
/ 06 июля 2011

Есть довольно много вопросов по этому вопросу, но не смог найти ни одного с конкретной проблемой у меня ...

В своем файле layout.xml я использую тег android:onClick для кнопки, чтобы вызвать правильное значение onClickListener. Я получаю ошибку:

java.lang.IllegalStateException: Could not find a method handle_cancel(View) in the activity class com.matthieu.HelloWorldApplication for onClick handler on view class android.widget.Button with id 'button_cancel'

У меня есть этот метод, реализованный в Activity, но он ищет его в классе, который расширяет Application ... Я не понимаю, почему. Вид и все, что настроено только в Упражнении.

Если кому-то нужно, вот объявление этого метода (в моей деятельности, НЕ в HelloWorldApplication):

public void handle_cancel(View v) {
    // do something useful here
}

Редактировать (из запроса adamp) ... и, вероятно, ответить на мой собственный вопрос:

Вот часть кода, где используется этот макет ...

public class AddVocabularyActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.top); // that layout contains an empty LinearLayout id/main_content
    }

    private some_other_function() {
        LinearLayout main_content = (LinearLayout) findViewById(R.id.main_content);
        main_content.removeAllViews();
        View.inflate(getApplicationContext(), R.layout.hello, main_content); // layout.hello is the one containing the button
    }

    // some other stuff
}

Во время копирования / вставки этого кода, я предполагаю, что проблема в том, что я использовал getApplicationContext, чтобы накачать View этим Button ...

Ответы [ 2 ]

4 голосов
/ 06 июля 2011

Как уже упоминалось в моем редактировании, изменение getApplicationContext() с контекстом Activity исправляет его ...

0 голосов
/ 06 июля 2011

Соглашение работает так: в XML-файле макета вы задаете этот атрибут: android: onClick: "methodname"

Затем внутри класса вы определяете метод следующим образом:

public void methodname (View v) {// код вашего метода}

Любой другой способ сделать это не задокументирован.Если вам нужны параметры, просто вызовите другой метод внутри этого метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...