我正在为Android开发一个GoogleMaps v2 API应用程序并遇到了问题。我想使用ActionBar(通过actionbarsherlock,用于向后兼容),如下图所示。
如果不调整我的代码来使用ActionBar,我的地图应用程序就能很好地工作。我尝试使代码符合使用它会产生一个空白屏幕和一个操作栏。因此,地图本身或其他任何内容都会被加载。
之前的代码:(仅限相关部分)
public class MapActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Initiate loader, so that files can be acquired in background thread.
new Loader().execute();
}
.
.
.
}
我没有包含导入或变量。不要担心,因为代码确实编译。
之后的代码:
public class MapActivity extends SherlockFragmentActivity {
public boolean onCreate(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0,SEARCH,0,"Search")
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
// Initiate loader, so that files can be acquired in background thread.
new Loader().execute();
return true;
}
public boolean onOptionsItemSelected (MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case SEARCH:
openSearchView();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
.
.
.
}
编辑 -
映射设置代码:(注意map
已声明为类变量)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Recovers map choice from previous activity.
Intent intent = getIntent();
map_descriptor = intent.getStringExtra(MAP);
MAP_CENTER = map2LatLng(map_descriptor);
map = setupMap(map);
// Initiate loader, so that files can be acquired in background thread.
new Loader().execute();
}
public GoogleMap setupMap(GoogleMap map) {
if (map == null) {
map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
// Just in case null map was accidently passed to setupMap.
}
map.setMapType(3); // TERRAIN
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(MAP_CENTER)
.zoom(ZOOM_LEVEL)
.build();
map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
map.setOnCameraChangeListener(new OnCameraChangeListener() {
public void onCameraChange(CameraPosition cameraPosition) {
ZOOM_LEVEL = cameraPosition.zoom;
recenterMap(ZOOM_LEVEL);
}
});
return map;
}
和XML布局代码:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment"/>
答案 0 :(得分:1)
如果您要使用带有ActionBarSherlock的Maps V1,则需要the add-on JAR for maps support - 基本上是一个知道ActionBarSherlock的MapActivity
。
如果要将Maps V2与ActionBarSherlock一起使用,通常会通过片段加载地图,例如this sample app。你的示例代码没有显示你如何在那里获得地图,因此很难猜出为什么没有为你显示地图。
答案 1 :(得分:1)
您没有正确设置SherlockFragmentActivity的内容视图,也没有在设置地图时设置地图。
在onCreate方法中,请确保在调用super.onCreate()后执行此类操作。
setContentView(R.layout.activity_main);
map = setupMap();
即使你从某个地方下载信息(或者你在asynctask中做的任何事情),你仍然需要设置内容视图以在onCreate中正确地膨胀地图。
您还需要确保从onCreate调用setupMap。您可以稍后添加标记。
自从API v2发布之日起,我一直在使用SherlockFragmentActivity和谷歌地图Android API v2,我没有遇到任何问题,因此它必须是您创建视图的顺序。