Я разрабатываю приложение API GoogleMaps v2 для Android и столкнулся с проблемой. Я хотел бы использовать ActionBar (через actionbarsherlock для обратной совместимости), как показано на следующем рисунке.
(источник: google.com)
Без адаптации моего кода для 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"/>