0

com.google.android.gms.maps.MapView に奇妙な問題があります。ガベージ コレクターがジョブを実行した後にアプリがクラッシュするかどうかを確認するには、HTC One (4.2.2) にバックグラウンドで実行中のアプリを 1 つだけ許可します。MapView を表示しているときにアプリ (ホーム ボタン) を離れ、他のアプリを起動してアプリを再開すると、MapView は表示されたままになりますが、マップを移動またはズームすることはできず、まったく応答しません。他の活動は順調に進んでいます。どこに問題があるのか​​ 本当にわかりません。

誰かが私を助けてくれることを願っていますか?

MapView public class FragmentAdvertlistMap extends Fragment {

com.google.android.gms.maps.MapView m;
GoogleMap mMap;
ArrayList<Advert> ads;
HashMap<Marker, String> myMarker;
public final LatLngBounds.Builder builder= new LatLngBounds.Builder();

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) {
     try {
        MapsInitializer.initialize(getActivity());
    } catch (GooglePlayServicesNotAvailableException e) {
        // TODO handle this situation
    }
    View inflatedView = inflater.inflate(R.layout.activity_advert_tab2, container, false);
    m = (com.google.android.gms.maps.MapView)inflatedView.findViewById(R.id.map_tab);
    m.onCreate(savedInstanceState);

    myMarker = new HashMap<Marker, String>();
    ads= AdvertListActivity.getAdverts();
    setUpMapIfNeeded(inflatedView);
    mMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

        @Override
        public void onInfoWindowClick(Marker arg0) {
            Intent myIntent = new Intent(getActivity(), AdvertLocationActivity.class);

            Advert putadvert = DefaultApplication.dbc.getAdvertForAdvertID(Integer.parseInt(myMarker.get(arg0)));

            myIntent.putExtra("advert", putadvert);
            startActivity(myIntent);

        }
    });
    return inflatedView;
}


private void setUpMapIfNeeded(View inflatedView) {
    if (mMap == null) {
        mMap = ((com.google.android.gms.maps.MapView) inflatedView.findViewById(R.id.map_tab)).getMap();
        if (mMap != null) {
            this.initMarker();
        }
    }
}

public void initMarker(){
    for(int i=0;i<ads.size();i++){
        Advert tempAd = ads.get(i);
        LatLng tlalo =  new LatLng(tempAd.mainLocation.latitude,tempAd.mainLocation.longitude);

        builder.include(tlalo);

        String address = "";
        if(tempAd.mainLocation.contact_street != null){
            address = address + tempAd.mainLocation.contact_street;
        }
        if(tempAd.mainLocation.contact_street_number != null){
            address = address + " " + tempAd.mainLocation.contact_street_number;
        }
        Marker marker = mMap.addMarker(new MarkerOptions()
        .position(tlalo)
        .anchor(0.5f, 0.5f)
        .title(tempAd.name)
        .snippet(address)
        .icon(BitmapDescriptorFactory.fromResource(R.drawable.androidpin)));

        myMarker.put(marker,String.valueOf(tempAd.myid));
    }



mMap.setOnCameraChangeListener(new OnCameraChangeListener() {
    @Override
    public void onCameraChange(CameraPosition arg0) {
        mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 100));
        mMap.setOnCameraChangeListener(null);
    }

});
}


@Override
public void onResume() {
    super.onResume();
    m.onResume();
}

@Override
public void onPause() {
    super.onPause();
    m.onPause();
}

@Override
public void onDestroy() {
    super.onDestroy();
    m.onDestroy();
}

@Override
public void onLowMemory() {
    super.onLowMemory();
    m.onLowMemory();
}


}
4

1 に答える 1

0

これを onCreateView() に追加してみてください

container.removeAllViews();

あなたの別の同様の質問で見つけましたが、回答の元のリンクを失いました...

于 2014-03-04T04:53:44.367 に答える