Я создаю приложение, которое использует API Карт Google, но сталкивается с некоторыми проблемами, когда я подкласс MapView. Причина, по которой я пытаюсь создать подкласс MapView, заключается в том, что я хочу обнаруживать и использовать двойные касания и длительные нажатия на карте для выполнения некоторых функций. Я вложил в подклассы MapActivity и MapView, как и в другом приложении, где, кажется, это работает должным образом, но я не могу заставить его работать в этом новом приложении, так как я получаю исключение при запуске приложения:
Данные об исключении: android.view.InflateException: строка двоичного XML-файла # 6: Ошибка надувания класса java.lang.reflect.Constructor
Мой подкласс MapView довольно прост:
import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.GestureDetector.OnDoubleTapListener;
import android.view.GestureDetector.OnGestureListener;
import com.google.android.maps.MapView;
public class TSMapView extends MapView {
private Context TSctx;
private GestureDetector gDetector;
public TSMapView(Context context, AttributeSet attrs) {
super(context, attrs);
this.TSctx = context;
this.gDetector = new GestureDetector((OnGestureListener) TSctx);
this.gDetector.setOnDoubleTapListener((OnDoubleTapListener)TSctx);
this.gDetector.setIsLongpressEnabled(false);
}
public boolean onTouchEvent(MotionEvent ev) {
if(this.gDetector.onTouchEvent(ev))
return true;
else
return super.onTouchEvent(ev);
}
}
Как и макет XML для моей MapActivity, который его создает:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.badlucksoft.thisspot.TSMapView android:id="@+id/tsmapview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:enabled="true" android:clickable="true" android:apiKey="<key>" />
</RelativeLayout>
Странно то, что если я заменил имя пакета / представления моего приложения в XML на default / normal "com.google.android.maps.MapView", мой код, кажется, работает нормально, но я не могу обнаружить двойной щелчки или длительные нажатия. Снова и снова сравнивая код с рабочим приложением, у меня не осталось ничего, кроме головной боли. Я представляю, что делаю что-то простое действительно неправильно, но я не могу понять, что в данный момент. Вот трассировка стека исключения, если это имеет значение, подкласс MapActivity - это TSMapAct, а основным действием является подкласс TabHost с именем ThisSpot:
Exception data: android.view.InflateException: Binary XML file line #6: Error inflating class java.lang.reflect.Constructor
Stack Trace 0: android.view.LayoutInflater.createView(LayoutInflater.java:512)
Stack Trace 1: android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:564)
Stack Trace 2: android.view.LayoutInflater.rInflate(LayoutInflater.java:617)
Stack Trace 3: android.view.LayoutInflater.inflate(LayoutInflater.java:407)
Stack Trace 4: android.view.LayoutInflater.inflate(LayoutInflater.java:320)
Stack Trace 5: android.view.LayoutInflater.inflate(LayoutInflater.java:276)
Stack Trace 6: com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:313)
Stack Trace 7: android.app.Activity.setContentView(Activity.java:1620)
Stack Trace 8: com.badlucksoft.thisspot.TSMapAct.onCreate(TSMapAct.java:43)
Stack Trace 9: android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
Stack Trace 10: android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
Stack Trace 11: android.app.ActivityThread.startActivityNow(ActivityThread.java:2242)
Stack Trace 12: android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
Stack Trace 13: android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
Stack Trace 14: android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:631)
Stack Trace 15: android.widget.TabHost.setCurrentTab(TabHost.java:317)
Stack Trace 16: android.widget.TabHost.addTab(TabHost.java:210)
Stack Trace 17: com.badlucksoft.thisspot.ThisSpot.onCreate(ThisSpot.java:35)
Stack Trace 18: android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
Stack Trace 19: android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
Stack Trace 20: android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
Stack Trace 21: android.app.ActivityThread.access$2100(ActivityThread.java:116)
Stack Trace 22: android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
Stack Trace 23: android.os.Handler.dispatchMessage(Handler.java:99)
Stack Trace 24: android.os.Looper.loop(Looper.java:123)
Stack Trace 25: android.app.ActivityThread.main(ActivityThread.java:4203)
Stack Trace 26: java.lang.reflect.Method.invokeNative(Native Method)
Stack Trace 27: java.lang.reflect.Method.invoke(Method.java:521)
Stack Trace 28: com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
Stack Trace 29: com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
Stack Trace 30: dalvik.system.NativeStart.main(Native Method)
Спасибо за ваше время,
Raymond