【问题标题】:GoogleMap null when trying to access it from another fragment尝试从另一个片段访问它时,GoogleMap null
【发布时间】:2015-05-20 07:19:52
【问题描述】:

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

我知道地图可以工作,因为在地图片段中按下按钮时,我可以看到我的当前位置,但我没有得到'n 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 对象为空?如果您需要更多信息,请告诉我!谢谢

【问题讨论】:

  • 请不要无缘无故投反对票,我可以解决问题
  • 您正在传递自定义对象,意味着您确定您正在传递正确的值 showMapFragment。
  • 是的,我已经检查过了,正确的 long + lat 值每次都会传递给 MapFragment,但我仍然收到错误 @user3676184
  • @user3676184 应用程序在使用我通过的自定义对象之前崩溃。如问题所述,当我调用 googleMap.clear() 时,我得到一个 NullPointer
  • 请评论 googleMap.clear() 并检查输出是什么?

标签: android android-fragments


【解决方案1】:

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

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 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多