我在创建自己的CustomInfoWindow时遇到问题。在不知道何处获得异常的情况下为什么
这是我简单的customInfoWindow类
public class CustomInfoWindow implements InfoWindowAdapter {
private LayoutInflater mInflater;
public CustomInfoWindow(LayoutInflater inflater) {
this.mInflater=inflater;
}
@Override
public View getInfoContents(Marker marker) {
View popup = mInflater.inflate(R.layout.info_window_layout, null);
TextView tv=(TextView)popup.findViewById(R.id.title);
tv.setText(marker.getTitle());
tv=(TextView)popup.findViewById(R.id.address);
tv.setText(marker.getSnippet());
return popup;
}
@Override
public View getInfoWindow(Marker marker) {
View popup = mInflater.inflate(R.layout.info_window_layout, null);
TextView tv=(TextView)popup.findViewById(R.id.title);
tv.setText(marker.getTitle());
tv=(TextView)popup.findViewById(R.id.address);
tv.setText(marker.getSnippet());
return popup;
}
}
我在这里设置它。 (MainActivity)
mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
.getMap();
mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(
Statics.LAT_TLV, Statics.LON_TLV), 13));
CustomInfoWindow customInfoWindow = new CustomInfoWindow(getLayoutInflater());
mMap.setInfoWindowAdapter(customInfoWindow);
我没有实现onMarkerClick方法。 地图加载标记(约40),但是当我点击其中一个标记时,我得到:
01-10 13:15:24.321: E/AndroidRuntime(21162): FATAL EXCEPTION: main
01-10 13:15:24.321: E/AndroidRuntime(21162): java.lang.NullPointerException
01-10 13:15:24.321: E/AndroidRuntime(21162): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java)
01-10 13:15:24.321: E/AndroidRuntime(21162): at android.view.View.measure(View.java)
01-10 13:15:24.321: E/AndroidRuntime(21162): at maps.a.y.i(Unknown Source)
01-10 13:15:24.321: E/AndroidRuntime(21162): at maps.a.y.a(Unknown Source)
01-10 13:15:24.321: E/AndroidRuntime(21162): at maps.a.w.a(Unknown Source)
01-10 13:15:24.321: E/AndroidRuntime(21162): at maps.a.bd.a(Unknown Source)
01-10 13:15:24.321: E/AndroidRuntime(21162): at maps.y.bw.b(Unknown Source)
01-10 13:15:24.321: E/AndroidRuntime(21162): at maps.y.bw.a(Unknown Source)
01-10 13:15:24.321: E/AndroidRuntime(21162): at maps.a.dh.a(Unknown Source)
01-10 13:15:24.321: E/AndroidRuntime(21162): at maps.a.n.c(Unknown Source)
01-10 13:15:24.321: E/AndroidRuntime(21162): at maps.a.dw.a(Unknown Source)
01-10 13:15:24.321: E/AndroidRuntime(21162): at maps.a.bd.c(Unknown Source)
01-10 13:15:24.321: E/AndroidRuntime(21162): at maps.a.dq.onSingleTapConfirmed(Unknown Source)
01-10 13:15:24.321: E/AndroidRuntime(21162): at maps.e.v.onSingleTapConfirmed(Unknown Source)
01-10 13:15:24.321: E/AndroidRuntime(21162): at maps.e.j.handleMessage(Unknown Source)
01-10 13:15:24.321: E/AndroidRuntime(21162): at android.os.Handler.dispatchMessage(Handler.java)
01-10 13:15:24.321: E/AndroidRuntime(21162): at android.os.Looper.loop(Looper.java)
01-10 13:15:24.321: E/AndroidRuntime(21162): at android.app.ActivityThread.main(ActivityThread.java)
01-10 13:15:24.321: E/AndroidRuntime(21162): at java.lang.reflect.Method.invokeNative(Native Method)
01-10 13:15:24.321: E/AndroidRuntime(21162): at java.lang.reflect.Method.invoke(Method.java)
01-10 13:15:24.321: E/AndroidRuntime(21162): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
01-10 13:15:24.321: E/AndroidRuntime(21162): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
01-10 13:15:24.321: E/AndroidRuntime(21162): at dalvik.system.NativeStart.main(Native Method)
如果有人可以帮助我,我会很感激,如果有一个非常简单的例子来说明如何创建自己的信息视图,那就太棒了。非常感谢。 UDI
答案 0 :(得分:12)
您不应该覆盖getInfoWindow()
和getInfoContents()
,至少在getInfoWindow()
永远不会返回null
的情况下。您永远不会使用getInfoContents()
。
如果我不得不猜测,你的问题出在你的布局文件中,但这只是猜测。
以下是InfoWindowAdapter
示例:
class PopupAdapter implements InfoWindowAdapter {
LayoutInflater inflater=null;
PopupAdapter(LayoutInflater inflater) {
this.inflater=inflater;
}
@Override
public View getInfoWindow(Marker marker) {
return(null);
}
@Override
public View getInfoContents(Marker marker) {
View popup=inflater.inflate(R.layout.popup, null);
TextView tv=(TextView)popup.findViewById(R.id.title);
tv.setText(marker.getTitle());
tv=(TextView)popup.findViewById(R.id.snippet);
tv.setText(marker.getSnippet());
return(popup);
}
}
将此布局文件用于InfoWindow
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:padding="2dip"
android:src="@drawable/ic_launcher"
android:contentDescription="@string/icon"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:textStyle="bold"/>
<TextView
android:id="@+id/snippet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15sp"/>
</LinearLayout>
</LinearLayout>
完整的示例应用程序可在以下位置找到:https://github.com/commonsguy/cw-omnibus/tree/master/MapsV2/Popups