2013-06-06 26 views
9

Tôi gặp vấn đề khi truy cập vào đoạn bản đồ. getFragmentManager(). FindFragmentById (R.id.map)) trả về luôn rỗng. Tôi không biết tại sao. Có vấn đề gì?Mapfragment findFragmentById luôn rỗng

Cảm ơn bạn!

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/root" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

     <TextView 
      android:id="@+id/tvNombreCentro" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:paddingBottom="10dp" 
      android:text="Large Text" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 


    <fragment 
      android:id="@+id/map" 
      android:name="com.google.android.gms.maps.SupportMapFragment" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:tag="tag_fragment_map" /> 

    </LinearLayout> 

Và trong hoạt động sau khi setContentView tôi thử truy cập vào bản đồ, nhưng tôi nhận được một ngoại lệ

public class Mapa extends Activity { 
private GoogleMap mMap; 
private ActionBar ab; 

private TextView tvNombreCentro; 
private TextView tvTelefonoValor; 
private TextView tvEMailValor; 
private TextView tvWebValor; 
private TextView tvDireccionValor; 

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

    setContentView(R.layout.mapa_centro); 
    GoogleMap mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)) 
      .getMap(); 
} 

Trả lời

21

sử dụng theo cách này:

SupportMapFragment mapFrag = (SupportMapFragment) getSupportFragmentManager() 
        .findFragmentById(R.id.map); 

      map = mapFrag.getMap(); 

here is full code with sample:

+0

xin lỗi vì sự chậm trễ. Nó hoạt động! – user1852854

+11

Lưu ý rằng nếu bạn sử dụng thư viện hỗ trợ Android để hiển thị bản đồ, hãy đảm bảo rằng tệp xml bố cục có chứa đoạn bản đồ phải có giá trị thuộc tính android: name thành 'com.google.android.gms.maps.SupportMapFragment 'thay vì' com.google.android.gms.maps.MapFragment', nếu không nó sẽ không hoạt động và tiếp tục trả về 'null' – Aryo

+0

Tuyệt vời! nó giúp tôi!. –

2

Trong trường hợp vấn đề của bạn không được giải quyết, hãy thử này:

Như bạn đang sử dụng SupportMapFragment, trong khi truy xuất bản đồ, hãy sử dụng

GoogleMap mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 

Ngoài ra, chan ge

public class Mapa extends Activity { 

để

public class Mapa extends FragmentActivity { 
+0

xin lỗi vì sự chậm trễ. Câu trả lời là đúng nhưng tôi không cần phải thay đổi mở rộng, chỉ getSupportFragmentManager. Cảm ơn bạn! – user1852854

1

Thay đổi trong cách bố trí

android:name = "com.google.android.gms.maps.SupportMapFragment"

by

android:name = "com.google.android.gms.maps.MapFragment".

Hoặc bạn có thể sử dụng getSupportFragmentManager() thay vì getFragmentManager().

1

Tôi gặp sự cố tương tự khi cố gắng lấy MapFragment nhưng bị vô hiệu vì thiết bị không được cập nhật Dịch vụ của Google Play.

Các vấn đề liên quan