尝试从其他片段

时间:2015-05-20 07:19:52

标签: android android-fragments

我的应用程序中有两个片段。 Ons是一个映射片段,另一个是列表片段。这两个都添加到单个活动中。我们的想法是,当从列表中选择用户时,应用程序切换到地图片段并显示用户。问题是我在GoogleMap对象上获得了nullPointer异常。

我知道地图有效,因为按下地图片段中的按钮,我可以看到我当前的位置,而且我没有得到NullPointer。

这是我的ListFragment中的onClickListener:

listEmployees.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            ChildUser childUser = children.get(position);
            Tracker.showMapFragment(childUser);
        }
    });

这是从我的父Activity中的ListFragment调用的函数:

public static void showMapFragment(ChildUser childUser) {

    mViewPager.setCurrentItem(0, true);
    MapFragment.showSelectedUser(childUser);
    trackingEmployee = true;
}

这是我在MapFragment中的适用代码:

初​​始化:

mMapFragment = new SupportMapFragment() {
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.d("MAP", "on activity created");
        googleMap = mMapFragment.getMap();
        googleMap.getUiSettings().setZoomControlsEnabled(false);
        }
    };

    getChildFragmentManager().beginTransaction().add(R.id.map, mMapFragment).commit();

showSelectedUser函数:

public static void showSelectedUser(ChildUser childUser) {

    try {
        googleMap.clear();
        LatLng point = new LatLng(childUser.getChildLatitude(), childUser.getChildLongetude());
        CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(point, 15);

        MarkerOptions marker = new MarkerOptions();
        marker.position(point);

        googleMap.addMarker(marker);
        googleMap.animateCamera(cameraUpdate);
    } catch (NullPointerException e) {
        e.printStackTrace();
    }
}

我在googleMap.clear();得到一个NullPointerException。请告诉我,当我从MapFragment中显示当前位置时,它可能会出错。如果您需要其他信息,请与我们联系。提前谢谢!

更新

当MapFragment可见并按下按钮时,我可以使用以下代码查看用户在MapFragment中的当前位置:

public static void showUserLocation() {

    googleMap.clear();
    if (Tracker.clockedInShift) {
        CacheUploads cacheUpload = new CacheUploads(context);
        LatLng point = cacheUpload.getMostRecentLocation();
        CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(point, 15);
        MarkerOptions marker = new MarkerOptions();
        marker.position(point);
        googleMap.addMarker(marker);
        googleMap.animateCamera(cameraUpdate);
    }
}

地图已正确链接,因为此代码已成功执行。从ListFragment访问时,为什么googleMap对象为null?如果您需要更多信息,请告诉我们!感谢

1 个答案:

答案 0 :(得分:0)

看起来这个问题的答案相当明显。使用内部类解决了问题。以下代码解决了所有问题:

private static GoogleMap googleMap;

public static class MyMapFragment extends SupportMapFragment {

    public MyMapFragment() {
        super();
    }

    public static MyMapFragment newInstance() {
        MyMapFragment frag = new MyMapFragment();
        return frag;
    }

    @Override
    public View onCreateView(LayoutInflater arg0, ViewGroup arg1, Bundle arg2) {
        View v = super.onCreateView(arg0, arg1, arg2);
        googleMap = getMap();
        return v;
    }
}

然后只需使用googleMap做任何你想做的事情。上面的代码应该在你的Activity / Fragment中。