无法在supportMapFragment上执行操作

时间:2014-05-01 13:10:47

标签: android google-maps android-viewpager google-maps-markers supportmapfragment

我已经花了几个小时,所以我最终决定需要一些帮助。

我在ViewPager中有一个SupportMapFragment(Google Map v2),viewpager本身位于TabFragment中。这不是一个美丽的景象,但它不是一个用于发布的应用程序。它更像是我未来开发的应用程序的概念证明。

所以,结构看起来像这样:

MainActivity:

  • 标签1
    • Tab1ViewPagerFragment 1< - MapFragment
    • Tab1ViewPagerFragment 2
    • Tab1ViewPagerFragment 3
  • 标签2
    • Tab2ViewPagerFragment 1
    • Tab2ViewPagerFragment 2
    • Tab2ViewPagerFragment 3
  • 标签3
    • Tab3ViewPagerFragment 1
    • Tab3ViewPagerFragment 2
    • Tab3ViewPagerFragment 3

正如我所说,不是一个美丽的景象,但我不关心这一点。

现在,发生了一些奇怪的事情。 地图显示正常,它在标准的世界视图中,我可以在应用程序中手动缩放/旋转/ ..

问题是,我不能为我的生活显示标记/缩放相机/ ...编程。

我在onViewCreated中获取地图,当我记录mMap.toString()时,我得到:

com.google.android.gms.maps.GoogleMap@476b528 (for example)

当我添加标记时,如下所示:

Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(latitude, longitude)));

它没有显示。此外,'标记'不是空的,我可以记录它的经度和纬度,所以我认为它是成功创建的(不知何故)。

我真的不明白这里发生了什么。

我愿意添加一些代码,但是在尝试了几个小时之后它就变得非常混乱了,所以如果你给我一些关于你需要看到什么的指示,我会'将它清理干净并贴上它。

提前致谢

修改

因为我不知道从哪里开始添加代码。我将从OnCreatedView开始:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    Log.d(TAG, "onViewCreated");
    SupportMapFragment supportMapFragment = 
                         (SupportMapFragment) GameFragment.mGamePagerAdapter.getRegisteredFragment(0);

    if (supportMapFragment == null) {
        Log.d(TAG, "onViewCreated > supportMapFragment == null");
        mMap = null;
    } else {
        Log.d(TAG, "onViewCreated > supportMapFragment != null > supportMapFragmentToString: " + supportMapFragment.toString());
        mMap = supportMapFragment.getMap();
    }


    if (mMap == null) {
        Log.d(TAG, "onViewCreated > mMap == null");
    } else {
        Log.d(TAG, "onViewCreated > mMap != null > mMap: " + mMap.toString());

        if (savedInstanceState == null) {
            Log.d(TAG, "onViewCreated > savedInstanceState == null");

            CameraUpdate center = CameraUpdateFactory.newLatLng(new LatLng(51.2, 4.5));
            CameraUpdate zoom = CameraUpdateFactory.zoomTo(15);

            mMap.moveCamera(center);
            mMap.animateCamera(zoom);
            mMap.getUiSettings().setZoomControlsEnabled(false);

            Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(latitude, longitude)));
            if (marker == null) {
                Log.d(TAG, "onViewCreated > savedInstanceState == null > marker == null");
            } else {
                Log.d(TAG, "onViewCreated > savedInstanceState == null > marker != null");
                LatLng location = marker.getPosition();
                Log.d(TAG, "onViewCreated > savedInstanceState == null > marker != null > MarkerToString: " + marker.toString());
                Log.d(TAG, "onViewCreated > savedInstanceState == null > marker != null > Marker Latidude: " + location.latitude);
                Log.d(TAG, "onViewCreated > savedInstanceState == null > marker != null > Marker Longitude: " + location.longitude);
                Log.d(TAG, "onViewCreated > savedInstanceState == null > marker != null > Camera Position: " + mMap.getCameraPosition().toString());
            }
        }

    }
    super.onViewCreated(view, savedInstanceState);
}

我猜您需要GamePagerAdapter中的' getRegisteredFragment' -method;

public Fragment getRegisteredFragment (int position) {
    return registeredFragments.get(position);
}

片段保存在SparseArray中,并存储在instantiateItem-method

@Override
public Object instantiateItem(ViewGroup container, int position) {
    Fragment fragment = (Fragment) super.instantiateItem(container, position);
    registeredFragments.put(position, fragment);
    return fragment;        
} 

更新

我从ViewPager中取出了SupportMapFragment并给了它自己的标签。现在它工作正常。

这仍然没有回答这个问题,但我的问题已经解决了。

0 个答案:

没有答案