0

質問

infowindow構成の変更後にカスタムが「膨張」しないのはなぜですか?

概要

を使用して地図上にマーカーを配置し、 を使用しMarkerManagerてカスタム情報ウィンドウを設定するアプリがありますsetInfoWindowAdapter

アプリをロードしてマーカーをクリックすると、情報ウィンドウにカスタム レイアウトが正しく表示されます。

ただし、構成が変更されるようにアプリを回転させた後、マーカーを選択するとカスタム情報ウィンドウが表示されなくなり、代わりに一般的な「タイトル」のみが表示されます。

これを正しく実装していないことを意味する、何時間もの読書とチュートリアルで見逃したものは何ですか?

コード

これは、問題を再現するための私のアプリの簡素化されたバージョンです

マップアクティビティ

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    MarkerManager.Collection mMarkerManagerCollection;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

        if(savedInstanceState == null){
            mapFragment.setRetainInstance(true);   // maintains the map fragment on orientation changes
        }
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        MarkerManager mMarkerManager = new MarkerManager(mMap);

        mMap.setInfoWindowAdapter(mMarkerManager);

        mMarkerManagerCollection = mMarkerManager.newCollection("myMarker");
        mMarkerManagerCollection.setOnInfoWindowAdapter(new GoogleMap.InfoWindowAdapter(){

            @Override
            public View getInfoWindow(Marker marker) {
                return null;
            }

            @Override
            public View getInfoContents(Marker marker) {
                View v = getLayoutInflater().inflate(R.layout.info_window, null);

                TextView tv = (TextView) v.findViewById(R.id.myTv);
                tv.setText("hello world, this is my marker");
                return v;
            }
        });


        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);

        MarkerOptions options = new MarkerOptions()
                .position(sydney)
                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))
                .flat(true)
                .title("Marker in Sydney");

        Marker marker = mMarkerManagerCollection.addMarker(options);
        marker.setTag("test marker");
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
}

info_window.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <ImageView
            android:layout_width="93dp"
            android:layout_height="96dp"
            android:id="@+id/rect_load"
            android:padding="2dp"
            android:src="@mipmap/ic_launcher"
            />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">


            <TextView
                android:id="@+id/myTv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="myText"/>

        </LinearLayout>
        
    </LinearLayout>

</LinearLayout>

グラドル

compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.google.android.gms:play-services:9.8.0'
compile 'com.google.maps.android:android-maps-utils:0.4'
compile 'com.google.android.gms:play-services:9.8.0'
4

1 に答える 1