【问题标题】:GoogleMap settings (addMarker, setMapType & CameraUpdate) not working in SupportMapFragmentGoogleMap 设置(addMarker、setMapType 和 CameraUpdate)在 SupportMapFragment 中不起作用
【发布时间】:2014-01-17 05:49:33
【问题描述】:

我的地图按预期开始,但标记、mapType 和缩放的设置从不适用于我的 SupportMapFragment。当我在另一个项目中启动相同的代码时,改为在 MainActivity 中,一切正常。如何使它在 SupportMapFragment 中工作?

MainActivity(工作):

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends Activity {
    private final LatLng BUTIKPLATS = new LatLng(57.873873, 11.974995);

    private GoogleMap karta;

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

        karta  = ((MapFragment) getFragmentManager().findFragmentById(R.id.karta)).getMap();

        karta.addMarker(new MarkerOptions().position(BUTIKPLATS).title("Vita Fläckens Blommor"));
        karta.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        CameraUpdate update = CameraUpdateFactory.newLatLngZoom(BUTIKPLATS, 17);
        karta.animateCamera(update);
    }


}

SupportMapFragment(不工作):

import android.os.Bundle;
import android.view.View;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class Karta extends SupportMapFragment{



    public static Karta newInstance() {
        Karta f = new Karta();
        return f;
    }


private GoogleMap karta;
private final LatLng BUTIKPLATS = new LatLng(57.873873, 11.974995);

public void onCreate(View v, Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
System.out.println("onViewCreated1");

        karta  = ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.kontaktVisaFragment)).getMap();
System.out.println("Karta initierad (.getMap)");        
        if (karta !=null){
System.out.println("Karta != null");            
            karta.addMarker(new MarkerOptions().position(BUTIKPLATS).title("Vita Fläckens Blommor"));
            karta.setMapType(GoogleMap.MAP_TYPE_HYBRID);

            CameraUpdate update = CameraUpdateFactory.newLatLngZoom(BUTIKPLATS, 17);
            karta.animateCamera(update);
        }
    }
}

【问题讨论】:

    标签: android google-maps android-fragments supportmapfragment


    【解决方案1】:

    SupportMapFragmentonCreate() 试图操纵GoogleMap 还为时过早,因为它还不存在。您需要等到稍后的时间点,当 GoogleMap 对象存在时,或者将代码保留在您的活动中。

    来自your previous questiononViewCreated() 应该是比onCreate() 更好的选择。但是,我的回答太复杂了。替换:

    karta  = ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.kontaktVisaFragment)).getMap();
    

    与:

    karta=getMap();
    

    【讨论】:

    • 再次感谢!你是天使!它在有和没有 ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.kontaktVisaFragment)) 的情况下都有效。我之前尝试将其更改为 onViewCreated ,但当时它崩溃了。那次我一定是做错了什么。
    猜你喜欢
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    相关资源
    最近更新 更多