Пользовательский MapView выбрасывает NoSuchMethodException, но он есть! - PullRequest
4 голосов
/ 10 сентября 2010

Я пытаюсь реализовать пользовательский MapView. Внутри моей MapActivity (называемой mainmap) у меня есть внутренний класс, который расширяет MapView:

private class Lmapview extends MapView{

    public Lmapview(Context context, AttributeSet attrs) {
        super(context, attrs);
        gestures = new GestureDetector(mainmap.this, new GestureListener(this));
    }

    public boolean OnTouchEvent(MotionEvent event){
        return gestures.onTouchEvent(event);

    }
}

У меня есть main.xml, отформатированный так, чтобы найти внутренний класс следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<view
    xmlns:android="http://schemas.android.com/apk/res/android"
    class="com.mondo.tbuddy.mainmap$Lmapview"
    android:id="@+id/mapview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:apiKey=*****
/>

Также в Androidmanifest.xml у меня есть соответствующая запись <uses-library android:name="com.google.android.maps"/>.

Когда я пытаюсь запустить свое приложение, я получаю (среди прочего) в logcat:

ОШИБКА / AndroidRuntime (14999): вызвано автор: android.view.InflateException: Бинарный XML-файл, строка № 2: ошибка раздувать класс com.mondo.tbuddy.mainmap $ Lmapview

Это вызвано этой записью, которую я нахожу в logcat:

ОШИБКА / AndroidRuntime (14999): вызвано автор: java.lang.NoSuchMethodException: Lmapview (Context, AttributeSet)

Если я правильно понимаю, мое приложение падает, потому что Android говорит, что не может найти подходящий конструктор для моего пользовательского MapView (класс Lmapview). Однако, как вы можете видеть выше, он определен и соответствует сигнатуре, которую он ищет.

Может кто-нибудь подсказать мне?

Спасибо.

1 Ответ

5 голосов
/ 10 сентября 2010

Вы не можете создать экземпляр внутреннего нестатического класса, пока у вас нет объекта суперкласса. Из-за этого вы должны сделать внутренний класс статическим или переместить его в отдельный класс.

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