If you think the Android project arcgis-runtime-samples-android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
Java Source Code
/* Copyright 2014 ESRI
*//www.java2s.com
* All rights reserved under the copyright laws of the United States
* and applicable international laws, treaties, and conventions.
*
* You may freely redistribute and use this sample code, with or
* without modification, provided you include the original copyright
* notice and use restrictions.
*
* See the Sample code usage restrictions document for further information.
*
*/package com.arcgis.android.samples.maps.switchmaps;
import android.app.ActionBar;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import com.esri.android.map.MapView;
/* This sample shows a way to switch between two different maps in a single app by leveraging the Android Fragments.
* In this app, a single MapActivity contains a MapFragment that in turn contains a MapView. When the button on the
* action bar is pressed, the existing MapFragment is replaced by a new instance of the MapFragment that has
* different map contents. The current extent of the MapView is preserved when switching between fragments, by
* making use of the retainState and restoreState methods on the MapView.
*/publicclass MainActivity extends Activity {
// service url string
String topoUrl;
String streetsUrl;
// Action bar, and items for switching between maps. Visibility of these items
// is changed, so that only one option is available at a time.
ActionBar mActionBar;
MenuItem mSwitchTo1MenuItem;
MenuItem mSwitchTo2MenuItem;
// Current map fragment state.
boolean map1Active = true;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// get service url from string resource
topoUrl = getResources().getString(R.string.topo);
streetsUrl = getResources().getString(R.string.streets);
if (savedInstanceState == null) {
// If no saved state exists, add a map fragment with the initial map
// service layer.
MapFragment mapFrag = new MapFragment();
// arguments to send to MapFragment
Bundle args = new Bundle();
// service url
args.putString("MAPURL", topoUrl);
// opening extent null as it is set by view xml
args.putString("MAPSTATE", null);
mapFrag.setArguments(args);
getFragmentManager().beginTransaction().add(R.id.fragmentContainer, mapFrag).commit();
} else {
// If there is saved state, then the fragment will be re-created by the android framework.
// Extract the saved state of the activity from the bundle parameter.
map1Active = savedInstanceState.getBoolean("map1Active", true);
}
// Set up the action bar.
mActionBar = getActionBar();
mActionBar.setTitle(R.string.app_name);
}
// Store temporary state so that this can be reinstated, for example if the device is rotated.
protectedvoid onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// Save the activity state - which map fragment is currently active.
outState.putBoolean("map1Active", map1Active);
}
// Update the action bar based on the saved state.
privatevoid updateActionBar() {
// Update the action bar subtitle to indicate the current map.
if (mActionBar != null) {
mActionBar.setSubtitle(map1Active ? R.string.map1 : R.string.map2);
}
// Update the visible menu items to allow correctly switching maps.
if (mSwitchTo1MenuItem != null) {
mSwitchTo1MenuItem.setVisible(!map1Active);
}
if (mSwitchTo2MenuItem != null) {
mSwitchTo2MenuItem.setVisible(map1Active);
}
}
@Override
publicboolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
// Get references to the buttons on the menu for use in onOptionsItemSelected.
mSwitchTo1MenuItem = menu.findItem(R.id.switchToMap1Button);
mSwitchTo2MenuItem = menu.findItem(R.id.switchToMap2Button);
// Initialize the state of the subtitles and buttons from the saved state.
updateActionBar();
return true;
}
@Override
publicboolean onOptionsItemSelected(MenuItem item) {
// Handle user pressing the action bar menu items.
boolean retVal = false;
// Get the current map directly from this activity.
MapView currentMap = (MapView) this.findViewById(R.id.map);
// Based on the menu item selected, switch the map fragment.
String mapUrl = null;
switch (item.getItemId()) {
case R.id.switchToMap2Button:
// Use the alternative map service as a layer.
mapUrl = streetsUrl;
map1Active = false;
break;
case R.id.switchToMap1Button:
// Use the first map service as a layer.
mapUrl = topoUrl;
map1Active = true;
break;
default:
retVal = super.onOptionsItemSelected(item);
break;
}
if (mapUrl != null) {
// Create a new fragment with a specific map service layer.
MapFragment mapFrag = new MapFragment();
// arguments to be sent to MapFragment
Bundle args = new Bundle();
// service url
args.putString("MAPURL", mapUrl);
// current extent
args.putString("MAPSTATE", currentMap.retainState());
mapFrag.setArguments(args);
// Create a transaction and replace existing fragment with this new
// fragment.
FragmentTransaction ft2 = getFragmentManager().beginTransaction();
ft2.replace(R.id.fragmentContainer, mapFrag);
ft2.commit();
// Update ActionBar subtitle, and action bar button visibility.
updateActionBar();
retVal = true;
}
return retVal;
}
}