Android SDK Tools Rev.17 - onClick - не найден соответствующий обработчик метода

1

Я обновил Android SDK Tools до версии 17, и после того, как я открыл Eclipse, я нашел список новых ошибок в представлении "Проблемы", которых не было до обновления. Эти ошибки были в файлах XML Layout, где я определил атрибут onClick для кнопок. При наведении мыши на пример сообщения об ошибке:

"Соответствующий обработчик методов" public void @string/timespanDefinition_btnSave_Click (android.view.View) "не найден"

вернулся. Я уже определил соответствующий обработчик метода и строковое представление для этого имени события. В чем причина и решение этой проблемы?

Некоторый код:

XML-макет

<ToggleButton
        android:id="@+id/timespanDefinition_tglVibration"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:checked="true"
        android:onClick="@string/timespanDefinition_tglVibration_Click"
        android:saveEnabled="true" />

Активность, которая раздувает XML-макет

public class TimespanDefinitionActivity extends Activity

{

// -- Attributes -- //

private long mRowId = -1;
private StringBuilder mBitWeekDays;
private String mTitle;

private EditText txtTitle;
private TabHost tabHost;
private TimePicker tmepkrStart;
private TimePicker tmepkrEnd;
private CheckBox[] weekDays;
private SeekBar skbrVolume;
private ToggleButton tglVibration;

// -- Class Events -- //

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    setContentView(R.layout.timespan_definition);

    initializeResources();

    Bundle extras = getIntent().getExtras();

    // Get the time-span Row ID
    mRowId = (extras != null) ? extras.getLong(RVSUtilities.getDefaultPackage() + TimespanScheduleTable.KEY_ROWID)
            : -1;

    populateResources();
}

// -- User Events -- //

public void tglVibration_Click(View v)
{
    if (((ToggleButton) v).isChecked())
    {
        Vibrator vibrate = (Vibrator) getSystemService(VIBRATOR_SERVICE);
        vibrate.vibrate(1000);
    }
}

strings.xml:

<string name="timespanDefinition_tglVibration_Click">tglVibration_Click</string>

Примечание. Приложение предназначено для Android 2.3.3, специально для Google API версии 10

Спасибо.

Теги:
onclick
android-sdk-2.3

3 ответа

5
Лучший ответ

В чем причина и решение этой проблемы?

Причиной является использование строкового ресурса для имени метода.

Решение состоит в том, чтобы избавиться от строкового ресурса и поместить имя метода в атрибут android:onClick напрямую.

ОБНОВЛЕНИЕ. Если маркеры не исчезают, щелкните правой кнопкой мыши над проектом и выберите "Инструменты Android"> "Очистить маркеры".

  • 0
    Я изменил атрибут onClick на: android:onClick="tglVibration_Click" но все было в порядке, потому что ошибка осталась. Однако, похоже, что ошибка не обновилась с новым значением атрибута. Поэтому я очистил и перестроил проект и даже попытался закрыть и снова открыть Eclipse, но ошибка осталась прежней: «Соответствующий обработчик метода» public void @ string / timespanDefinition_tglVibration_Click (android.view.View) 'not found «Есть идеи?
  • 0
    @Kurt: Нет, я бы ожидал, что простое изменение файла решит вашу проблему, не говоря уже о чистке проекта или перезапуске Eclipse. Используете ли вы tglVibration_Click для нескольких виджетов, где, возможно, еще есть строковый ресурс для другого?
Показать ещё 3 комментария
1

Вскоре после обновления/установки он показывает ошибки. Но повторный запуск Lint исправляет проблему.

Щелкните правой кнопкой мыши Project → Android Tools → Нажмите "Run Lint: проверьте наличие общих ошибок"

0

У меня была такая же проблема...

  1. check tools: context = ". MainActivity" в вашем XML-ролике, указывающий на правовую активность java
  2. Восстановленный или чистый проект из build--> чистый проект в верхнем меню
  3. убедитесь, что у вас есть View в ваших параметрах функции public void onclickdo (View view)

надеюсь, что это полная помощь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню