2017-03-17 115 views
-5

我在谷歌地圖上找到了以下代碼(第2項)以顯示設備當前位置......效果很好......但是如何將其轉換爲片段以將其添加到現有主要活動。我的大部分代碼使用片段如下:(1項):android將片段活動轉換爲片段

項目1

switch (position) { 
      case 0: 
       fragment = new HomeFragment(); 
       break; 
      case 1: 
       fragment = new login_login(); 
       break; 
      case 2: 
       fragment = new login_create(); 
       break; 
      case 3: 
       fragment = new calendar(); 
       break; 
      case 4: 
       fragment = new live_webcast(); 
       break; 
      case 5: 
       fragment = new live_webcast_archive(); 
       break; 
      case 6: 
       fragment = new find_us(); 
       break; 

項目2

import android.location.Location; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.util.Log; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.CameraPosition; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

public class Maps2Activity extends FragmentActivity implements LocationProvider.LocationCallback { 


    // Use Location Provider 
    public static final String TAG = Maps2Activity.class.getSimpleName(); 

    private GoogleMap mMap; // Might be null if Google Play services APK is not available. 

    private LocationProvider mLocationProvider; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity2_maps); 
     setUpMapIfNeeded(); 

     mLocationProvider = new LocationProvider(this, this); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     setUpMapIfNeeded(); 
     mLocationProvider.connect(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     mLocationProvider.disconnect(); 
    } 

    private void setUpMapIfNeeded() { 
     // Do a null check to confirm that we have not already instantiated the find_us. 
     if (mMap == null) { 
      // Try to obtain the find_us from the SupportMapFragment. 
      mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
        .getMap(); 
      // Check if we were successful in obtaining the find_us. 
      if (mMap != null) { 
       setUpMap(); 
      } 
     } 
    } 

    /** 
    * This is where we can add markers or lines, add listeners or move the camera. In this case, we 
    * just add a marker near Africa. 
    * <p/> 
    * This should only be called once and when we are sure that {@link #mMap} is not null. 
    */ 
    private void setUpMap() { 
     //mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); 
    } 

    public void handleNewLocation(Location location) { 
     Log.d(TAG, location.toString()); 

     double currentLatitude = location.getLatitude(); 
     double currentLongitude = location.getLongitude(); 
     LatLng latLng = new LatLng(currentLatitude, currentLongitude); 

     commonfunc.myprint("Lat/Lon______________: " + " " + currentLatitude + "-" +currentLongitude); 

     //mMap.addMarker(new MarkerOptions().position(new LatLng(currentLatitude, currentLongitude)).title("Current Location")); 
     MarkerOptions options = new MarkerOptions() 
       .position(latLng) 
       .title("I am here!"); 
     mMap.clear(); 
     mMap.addMarker(options); 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 

    } 
} 

回答

1

您可以使用一個片段與SupportMapFragment窗口小部件,像這樣:

MapFragment:

public class MapFragment extends Fragment implements OnMapReadyCallback,GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 

    public static MapFragment newInstance() { 

     Bundle args = new Bundle(); 

     MapFragment fragment = new MapFragment(); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    private GoogleMap mMap; 

    private GoogleApiClient mGoogleApiClient; 

    private Context mContext; 

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 

     this.mContext = context; 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_maps, null); 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 
    } 


    /** 
    * Manipulates the map once available. 
    * This callback is triggered when the map is ready to be used. 
    * This is where we can add markers or lines, add listeners or move the camera. In this case, 
    * we just add a marker near Sydney, Australia. 
    * If Google Play services is not installed on the device, the user will be prompted to install 
    * it inside the SupportMapFragment. This method will only be triggered once the user has 
    * installed Google Play services and returned to the app. 
    */ 
    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 

     // Get location 
     if (mGoogleApiClient == null) { 
      mGoogleApiClient = new GoogleApiClient.Builder(mContext) 
        .addConnectionCallbacks(this) 
        .addOnConnectionFailedListener(this) 
        .addApi(LocationServices.API) 
        .build(); 

      mGoogleApiClient.connect(); 
     } 
    } 

    @Override 
    public void onStart() { 
     if (mGoogleApiClient != null) 
      mGoogleApiClient.connect(); 
     super.onStart(); 
    } 

    public void onStop() { 
     if (mGoogleApiClient != null) 
      mGoogleApiClient.disconnect(); 
     super.onStop(); 
    } 

    @Override 
    public void onConnected(@Nullable Bundle bundle) { 
     if (ActivityCompat.checkSelfPermission(mContext, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mContext, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      return; 
     } 
     // Add a marker in Sydney and move the camera 
     Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
     LatLng here = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude()); 
     mMap.addMarker(new MarkerOptions().position(here).title("YOU ARE HERE").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN))); 
     mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(here, 14)); 

    } 

    @Override 
    public void onConnectionSuspended(int i) { 

    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

    } 

} 

R.layout.fragment_maps:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/contenitor_child" 
       android:orientation="horizontal" 
       android:layout_width="fill_parent" 
       android:layout_height="50dp" > 

    <fragment android:id="@+id/map" 
     android:name="com.google.android.gms.maps.SupportMapFragment" 
     app:layout_collapseMode="parallax" 
     android:layout_width="match_parent" 
     android:layout_height="400dp"/> 

</LinearLayout> 

記得添加克 編譯 'com.google.android.gms:發揮服務:9.8.0'