如何调整MapFragment(Android)

时间:2015-04-27 16:16:29

标签: java android dictionary fragment marker

我制作的MapFragment基本上是GoogleMaps。通过fragmentManager和fragment事务在一个活动中调用此Fragment。我想现在调整我的地图以添加一些标记和动态缩放。我此刻有点挣扎。也许你们中的一些人可以看看并帮忙。

MapsActivity.java

public class MapsActivity extends Activity {

Context context;
Button showMap;
Button showMyLocation;

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

    context = this;

    showMap = (Button)findViewById(R.id.showMap);
    showMap.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentManager fm = getFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            MapFragment mf = new MapFragment();
            MapFragment.googleMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble("2.900000"), Double.parseDouble("1.55555")))
            .title("oh yeah"));
            ft.add(R.id.maps_layout, mf);
            ft.commit();
        }
    });

    showMyLocation = (Button)findViewById(R.id.showMyLocation);
    showMyLocation.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
}

MapFragment.java

public class MapFragment extends Fragment {

public static GoogleMap googleMap;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.map_fragment_layout, container, false);
    return v;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    googleMap = ((com.google.android.gms.maps.MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
}


 }

更新到上面的代码后,它在stacktrace中给出了这个错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.model.Marker com.google.android.gms.maps.GoogleMap.addMarker(com.google.android.gms.maps.model.MarkerOptions)' on a null object reference
        at com.example.dell.exampleapplication.MapsActivity$1.onClick(MapsActivity.java:42)
        at android.view.View.performClick(View.java:5156)
        at android.view.View$PerformClick.run(View.java:20755)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:145)
        at android.app.ActivityThread.main(ActivityThread.java:5834)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)

这可能会提供额外的帮助信息。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

好的就是我如何使用它:

public class Mapfrag2 extends Fragment{
    public static   GoogleMap map;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.map_fragment_layout, container, false);}

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

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

        if (savedInstanceState == null) {
            map.setMyLocationEnabled(true);
            CameraUpdate center = CameraUpdateFactory.newLatLng(new LatLng(30.76793169992044, 1.98180484771729));//moving the map to defined position
            CameraUpdate zoom = CameraUpdateFactory.zoomTo(5);
            map.moveCamera(center);
            markerPoints = new ArrayList<LatLng>();

            map.animateCamera(zoom);
            map.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
                @Override
                public void onInfoWindowClick(Marker marker) {
                   //doing something when pressing marker's bubble
                }
            });
        }

    }









}
在您的活动中

只需致电

 MapFrag2.map 

例如

从活动中添加标记

Mapfrag2.map.addMarker(new MarkerOptions().position(
                        new LatLng(Double.parseDouble(lat), Double.parseDouble(lon)))
                        .title(title).snippet(snippet));

清除地图

 Mapfrag2.map.clear();

编辑2

尝试更改此部分代码

public void onClick(View v) {
            FragmentManager fm = getFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            MapFragment mf = new MapFragment();
            MapFragment.googleMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble("2.900000"), Double.parseDouble("1.55555")))
            .title("oh yeah"));//move this to the end
            ft.add(R.id.maps_layout, mf);
            ft.commit();
           //here you add your marker
        }

答案 1 :(得分:0)

我发现解决方案非常简单。我只是按照此Wiki页面中的步骤(http://www.techotopia.com/index.php/Working_with_the_Google_Maps_Android_API_in_Android_Studio)。它基本上向你解释了一切。

简单提示:让MapActivity扩展FragmentActivity!