2016-01-17 4 views
0

Мне нужно добавить маркер к карте и автоматически сфокусироваться на этом маркере. Я следовал инструкциям Map project Загрузка карты на фрагмент, но маркер не отображается. Я новичок в андроиде. Я попробовал много примеров. Но ответа не нашел. Пожалуйста помоги. Спросите, нужна ли какая-либо дополнительная информация. Спасибо.Маркер карты не отображается

fragment_profile.xml

<fragment 
     android:id="@+id/map_fragment" 
     android:name="com.google.android.gms.maps.MapFragment" 
     android:layout_width="fill_parent" 
     android:layout_height="100dp" 
     android:layout_below="@id/text_profile_location" 
     android:layout_marginTop="10dp" 
     android:layout_weight="1" /> 

FragmentProfile.java

public class FragmentProfile extends android.app.Fragment{ 

private GoogleMap googleMap; 
private EditText textBirthdate; 

public FragmentProfile() { 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    final View rootView = inflater.inflate(R.layout.fragment_profile, container, false); 

    googleMap = ((MapFragment) this.getChildFragmentManager().findFragmentById(
      R.id.map_fragment)).getMapAsync(this);); 
return rootView; 
} 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    double latitude = 37; 
    double longitude = 127; 

    MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Hello Maps "); 
    Log.e("Latitude", "127"); 
    // adding marker 
    googleMap.addMarker(marker); 
    CameraUpdate update = CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 11); 
    googleMap.animateCamera(update); 
} 

} 
+0

Добавить еще код, где вы используете этот метод, и как вы фокусируетесь на этом маркере. –

ответ

1

После того, как вы добавили маркер на карте, вы должны переместить "камеры" в этой позиции ,

 CameraUpdate update = CameraUpdateFactory.newLatLngZoom(latLng, 11); 
     googleMap.animateCamera(update); 

Редактировать Не называйте свой initializeMap из onCreateView потому что MapFragment еще не готов на данный момент. Вы не видите проблему из-за вашей попытки. Если вы хотите просмотреть зарегистрированные исключения, используйте Log.e(,,e) вместо e.printStackTrace.

Так что вам нужно либо опубликовать ваш initializeMap в обработчик или использовать getMapAsync, а затем, как это было предложено pRaNaY, осуществлять OnMapReadyCallback, чтобы получить информацию о том, когда карта готова.

Больше редактировать После того, как Вы отправили новый код ... Прежде всего, новый код, который Вы отправили бы даже не компилируется, поскольку getMapAsync не возвращает GoogleMap. Во-вторых, к тому времени, когда вы вызываете findFragmentById, (Child) FragmentManager еще не добавил MapsFragment, поэтому фрагмент не будет найден. Переместите findFragmentById и getMapAsync звонки в onResume или отправьте их в обработчик.

+0

Благодарим за ответ, но это не сработало. – Choxmi

+0

@Choxmi Вы видите карту без маркера или видите пустую карту? Вам не нужно o добавлять '.icon (BitmapDescriptorFactory ...), поскольку pRaNaY предлагается, потому что маркер по умолчанию отображается, если вы не указываете никакой пользовательский. Вам нужно только реализовать OnMapReadyCallback, как он предложил в своем редактировании, если вы используете' getMapAsync () ', но вы использовали' getMap() '. – sorianiv

+0

Я получаю карту без маркера. – Choxmi

1

Вам нужно только добавить .icon(..) из MapMarkerOptions. Как показано ниже:

MarkerOptions marker = new MarkerOptions() 
.icon(BitmapDescriptorFactory.fromResource(R.drawable.your_marker)); 
.position(new LatLng(latitude, longitude)).title("Hello Maps "); 

правок: Вы должны реализовать OnMapReadyCallback и добавить маркер в @Override public void onMapReady(GoogleMap map) { ... }.

@Override 
public void onMapReady(GoogleMap map) { 
    MarkerOptions marker = new MarkerOptions() 
.icon(BitmapDescriptorFactory.fromResource(R.drawable.your_marker)); 
.position(new LatLng(latitude, longitude)).title("Hello Maps "); 
} 

См here

+0

Спасибо за ответ, но он не сработал. – Choxmi

+0

Я попробовал раньше. Но это не сработало @pRaNaY – Choxmi

1

Попробуйте указать карту, на которой поместить маркер. Если вы не укажете карту при построении маркера, маркер будет создан, но не будет прикреплен/отображен на карте. вы можете добавить маркер, вызвав метод setMap().

Вот пример кода для метода setMap():

var marker = new google.maps.Marker(); 
marker.setPosition(new google.maps.LatLng(47.3732589, 8.2382168)); 
marker.setMap(map); 

Я надеюсь, что это может помочь вам.

0

Приятно, что я смог найти ответ с помощью @sorianiv и @pRaNaY.То, что я сделал на заключительной стадии, было, используя MapFragment mapFragment = (MapFragment) this.getChildFragmentManager() .findFragmentById(R.id.map_fragment); mapFragment.getMapAsync(this); вместо googleMap = ((MapFragment) this.getChildFragmentManager().findFragmentById( R.id.map_fragment)).getMapAsync(this););. Спасибо, ребята.

Смежные вопросы