我已经花了几个小时,所以我最终决定需要一些帮助。
我在ViewPager中有一个SupportMapFragment(Google Map v2),viewpager本身位于TabFragment中。这不是一个美丽的景象,但它不是一个用于发布的应用程序。它更像是我未来开发的应用程序的概念证明。
所以,结构看起来像这样:
MainActivity:
正如我所说,不是一个美丽的景象,但我不关心这一点。
现在,发生了一些奇怪的事情。 地图显示正常,它在标准的世界视图中,我可以在应用程序中手动缩放/旋转/ ..
问题是,我不能为我的生活显示标记/缩放相机/ ...编程。
我在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并给了它自己的标签。现在它工作正常。
这仍然没有回答这个问题,但我的问题已经解决了。