2013-04-14 33 views
16

Cố gắng kết hợp MapFragment một chút trong một hoạt động tôi đang xây dựng, nhưng có một số vấn đề khiến nó hoạt động. Tôi biết rằng các dịch vụ Api và Play của Maps đều được cài đặt chính xác, như tôi đã làm hướng dẫn kiểm tra và mọi thứ hoạt động tốt.SupportMapFragment - không thể truyền từ Fragment sang MapFragment

Làm theo tài liệu here, tôi đang gặp sự cố sau: Trong phương thức setUpMapIfNeeded của tôi, tôi có thể sử dụng getFragmentManager() hoặc getSupportFragmentManager(). Khi tôi sử dụng getFragmentManager(), Eclipse là mát mẻ với nó, nhưng khi tôi chạy, tôi nhận được một NoSuchMethodError nói rằng phương pháp này là không xác định. Khi tôi chọn cho getSupportFragmentManager(), Eclipse không thích nó và cho tôi lỗi "Không thể truyền từ Phân đoạn đến MapFragment". Vậy thỏa thuận là gì? Bất kỳ đề xuất?

private void setUpMapIfNeeded() { 
    //Do a null check to confirm that we have not already instantiated the map. 
    if (mMap == null) { 
     mMap = ((MapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 
     if (mMap != null) { 
      //do things to the map 
      mMap.addMarker(new MarkerOptions().position(LOCATION).title(EXTRA_URL)); 
      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(LOCATION,15)); 
      mMap.getUiSettings().setZoomControlsEnabled(false); 
     } 
    } 
} 

Hãy cho tôi biết nếu có bất kỳ mã nào khác mà tôi có thể cung cấp và tôi rất sẵn lòng đăng nó một cách nhanh chóng.

+0

bạn có thuộc tính lớp trong R.id.map không? 'class =" com.google.android.gms.maps.MapFragment "' –

Trả lời

77

Tôi có thể sử dụng getFragmentManager() hoặc getSupportFragmentManager().

Sẽ không có tranh luận ở đây. Nếu getSupportFragmentManager() có sẵn cho bạn, thì bạn đang sử dụng gói quay lại của gói hỗ trợ Android và đây là phương pháp mà bạn phải sử dụng.

Khi tôi chọn tham gia getSupportFragmentManager(), Eclipse không thích nó và cung cấp cho tôi lỗi "Không thể truyền từ Fragment sang MapFragment".

Đó là vì bạn không nên sử dụng MapFragment. Bạn đang sử dụng backport của gói hỗ trợ Android, và do đó bạn phải sử dụng SupportMapFragment.

+0

gosh tôi cảm thấy thực sự ngớ ngẩn bây giờ. tôi đã chắc chắn nhận thức được điều đó, nhưng dường như đã không thay đổi tất cả chúng thành SupportMapFragment. Tôi đã nhập MapFragment và không hỗ trợ MapMapFragment. Cảm ơn! Giải quyết vấn đề của tôi. – user2163853

+0

@ user2163853 Cũng rơi cho những sai lầm ngớ ngẩn ở đây! –

+2

Đôi khi những sai lầm ngớ ngẩn giúp người khác (có thể là người mới) nắm bắt một khái niệm, vì vậy đừng bao giờ cảm thấy quá ngớ ngẩn;) – marienke

0

Đây là những gì tôi phải làm, bởi vì tôi đã làm việc dưới cấp 11;

import com.google.android.gms.maps.GoogleMap; 
    import com.google.android.gms.maps.SupportMapFragment; 
    import android.support.v4.app.FragmentActivity; 

    public class MapaActivity extends FragmentActivity { 

    private GoogleMap map; 

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

     map = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapa)).getMap(); 
    } 
} 
0

hey chỉ cần thêm v4 jar để libs của bạn thư mục và thêm để xây dựng sau đó trong trang Fragment của bạn chỉ cần nhập

nhập khẩu android.support.v4.app.FragmentActivity;

bạn có thể có khả năng mở rộng FragmentActivity

public class MainActivity kéo dài FragmentActivity thực hiện LocationListener {

}

và nó cũng truy cập getSupportFragmentManager();

Hỗ trợMapFragment fm = (SupportMapFragment) getSupportFragmentManager(). FindFragmentById (R.id.map);

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