2015-01-30 29 views
5

ile Maps V2 FragmentActivity ve SupportMapFragment kullanarak çalışan ama şimdi yukarıdaki kullanarak ancak MapView ile çalışmıyor almaya çalışıyorum var map olsun olamaz. Haritalar dokümanları her iki şekilde de yapabileceğinizi söylüyor.Google Maps V2 MapView

Uygulama çalışıyor, ancak sadece siyah bir ekran, harita yok.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

<com.google.android.gms.maps.MapView 
    android:id="@+id/mapview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

</LinearLayout> 

Java dosyası:

package com.jps.mapstestthree; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.LayoutInflater; 
import android.content.Context; 

import com.google.android.gms.maps.*; 
import com.google.android.gms.maps.model.*; 

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapView; 


public class MainActivity extends Activity 
implements OnMapReadyCallback 
{ 

    private GoogleMap googleMap; 
    private View view; 
    private MapView mapView; 
    Context context; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     context = (Context)getApplication(); 

     LayoutInflater inflater =(LayoutInflater) 
      context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     view = inflater.inflate(R.layout.activity_main, null); 
     mapView = (MapView)view.findViewById(R.id.mapview); 
     mapView.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     try 
     { 
      initilizeMap(); 
     } 
     catch (Exception e) 
     { 
     } 

    } 

    private void initilizeMap() 
    { 
     if (googleMap == null) 
     { 
      mapView.getMapAsync(this);   
     } 
    } 

    @Override 
    protected void onResume() 
    { 
     mapView.onResume(); 
     super.onResume(); 

     initilizeMap(); 
    } 

    @Override 
    public void onMapReady(GoogleMap map) 
    { 
     map.addMarker(new MarkerOptions() 
     .position(new LatLng(0, 0)) 
     .title("Marker")); 
    } 
} 

Benim AndroidManifest.xml Ben Fragments kullanarak ne zaman dan değişmez yüzden Anahtar ve her şey, çalışır durumda olduğunu biliyoruz.

Ve fragmanlar nerede kullanılmadığı takdirde bunu gerek yoktu çünkü destek v4 .jar kaldırıldı. o, MapView yönlendirme yapmak hepsini istiyor gibiydi ama onlar hakkında şikayet beri

Ben, tanımlanmış, onDestory() gibi diğer Yöntemleri sahip çalıştı, ben de onları kaldırıldı.

onMapReady()'da daha fazla şey yapmayı denedim, ancak çok iyi görünmüyor.

V2 için MapView kullanımının çok az örneği vardır.

o Fragment kullanarak ve MapView kullanmadan bir gösteren haritayı elde etmek mümkün mü?

Eğer öyleyse, bir şey göstermek için ne yapmam gerekiyor?

Güncelleme 1:

Birkaç şey daha çalıştı, ancak hala şans. geri eklenen tüm public final void onDestroy() vb o LogCat içinde, bu kez şikayet etmedi ve iletilen, bu hala destek v4 .jar içinde Fragment kullanmaya çalışıyor, bu yüzden bile destek v4 geri eklenir benziyordu. jar, --subprojects ile bir android güncelleme projesi yeniden yaptım ve hala bir siyah ekran olsun, ama onun başlık var.

Evet, aynı proje, yalnızca ana proje adı olarak yeniden adlandırıldı, paket adı aynıdır ve Anahtar, çalıştığı zamankiyle aynıdır.

Ben de *. Haritalarla üst ithalatı kaldırıldı ve gerekli bireysel olanları eklendi ve temiz bir yapı yaptılar.

GÜNCELLEME 2:

Sonunda o destek v4 .jar kullanmadan çalışma var! Ve herhangi bir Fragments. Ben oyun hizmetleri örneklerinde örnek kaynağını RawMapViewDemo.java bulundu temelde, yeniden --subprojects ile 'android güncelleme projesi' ran kullanan uygulamayı değiştirdi ve işe yaradı !!

İşte, birilerine yardımcı olabileceği umuduyla, tam kaynak.

package com.jps.mapstestthree; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 

import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.model.MarkerOptions; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapView; 

public class MainActivity extends Activity 
    implements OnMapReadyCallback 
{ 

    // Google Map 
    private GoogleMap googleMap; 
    private View view; 
    private MapView mapView; 

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

     mapView = (MapView)findViewById(R.id.mapview); 
     mapView.onCreate(savedInstanceState); 

     mapView.getMapAsync(this); 
    } 


    @Override 
    protected void onResume() 
    { 
     super.onResume(); 
     mapView.onResume(); 
    } 

    @Override 
    public void onMapReady(GoogleMap map) 
    { 
     map.addMarker(new MarkerOptions() 
      .position(new LatLng(0, 0)) 
      .title("Marker")); 
    } 


    @Override 
    public final void onDestroy() 
    { 
     mapView.onDestroy(); 
     super.onDestroy(); 
    } 

    @Override 
    public final void onLowMemory() 
    { 
     mapView.onLowMemory(); 
     super.onLowMemory(); 
    } 

    @Override 
    public final void onPause() 
    { 
     mapView.onPause(); 
     super.onPause(); 
    } 
} 
+0

Logcat'ta bir şey var mı? Çalışırken olduğu gibi aynı hata ayıklama anahtarı ile mi imzalanıyorsunuz? – stkent

+0

Fragmanlar etkinliklerle benzer şekilde davranır. Ayrıca, tek yol olmasa da haritaları uygulamaya koymanın en kolay yolu budur. Belki bu dokümantasyonda beğeneceğiniz başka bir yol bulabilirsiniz. [** doc **] (https://developers.google.com/maps/documentation/android/) Ayrıca bunu deneyebilirsiniz. [** Link **] (https://gist.github.com/joshdholtz/4522551) –

+0

Çözümünüzle yapılan güncelleme, yanıt olarak daha uygun bir şekilde yayınlanmış olurdu. – dm78

cevap

10

Sorunuzdaki güncelleştirme, bunu nasıl çözdüğünüze dair bir gizem havası bırakıyor. Bu sınıfın

Kullanıcılar tüm yaşam döngüsü yöntemleri iletmelidir: Bunun için gerekli olan

(en azından belirtilen) ana Faaliyet veya Fragment yaşam döngüsü geri aramaları MapView için API docs takip edip iletmek olduğunu Bu görünümü Activity veya Fragment'dan bu sınıftaki ilgili olanlara içerir. Özellikle, aşağıdaki yöntemleri iletmelidir:

  • onCreate(Bundle)
  • onResume()
  • onPause()
  • onDestroy()
  • onSaveInstanceState()
  • onLowMemory()

Ve sonra, MapView tarafından kullanılan GoogleMap için bir başvuru almak için belirtildiği gibi MapView#getMapAsync(OnMapReadyCallback) kullanın.

İlgili konular