1

фон
Я реализует детальный вид пользовательского местоположения. В этой операции используется ViewPager с различными фрагментами, где нужно быть SupportMapFragment. Я тестирую Moto E, используя 5.0.2.

Проблема
Когда маркер нажимается панель карты должна скользить справа. Эта панель инструментов не отображается. Отображаются все другие элементы управления, такие как компас и кнопка «Сковорода для моего местоположения». Когда я делаю это обычным способом с Activity, который имеет фрагмент, закодированный в XML, элементы управления скользят, как должны.

Я также попытался добавить фрагмент к деятельности обычным способом, как это:
подклассов из SupportMapFragment в ViewPager обыкновение показывать панели инструментов карты

Fragment fragment = MapFragment.newInstance(title, lat, lng); 
getSupportFragmentManager().beginTransaction().replace(R.id.testMapContainer, fragment).commit();
Реализация

public class MapFragment extends SupportMapFragment implements OnMapReadyCallback {

private final static String TITLE_KEY = "titleKey"; private final static String LATITUDE_KEY = "latitudeKey"; private final static String LONGITUDE_KEY = "longitudeKey"; private final static float ZOOM = 14; private String title; private double latitude; private double longitude; public MapFragment() { super(); } public static MapFragment newInstance(String title, double latitude, double longitude) { MapFragment fragment = new MapFragment(); Bundle bundle = new Bundle(); bundle.putString(TITLE_KEY, title); bundle.putDouble(LATITUDE_KEY, latitude); bundle.putDouble(LONGITUDE_KEY, longitude); fragment.setArguments(bundle); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = super.onCreateView(inflater, container, savedInstanceState); Bundle bundle = getArguments(); title = bundle.getString(TITLE_KEY); latitude = bundle.getDouble(LATITUDE_KEY); longitude = bundle.getDouble(LONGITUDE_KEY); getMapAsync(this); return v; } @Override public void onMapReady(GoogleMap map) { LatLng targetLatLng = new LatLng(latitude, longitude); map.getUiSettings().setMapToolbarEnabled(true); map.setBuildingsEnabled(true); map.setMyLocationEnabled(true); map.moveCamera(CameraUpdateFactory.newLatLngZoom(targetLatLng, ZOOM)); map.addMarker(new MarkerOptions() .title(title) .position(targetLatLng)); } }

Кто-нибудь знает, что проблема может быть? Я уверен, что это имеет какое-то отношение к моей реализации SupportMapFragment.

EDIT:
Проблема заключалась в XML деятельности, на котором размещается ViewPager. MapToolbar есть, но выключен. Я почти не вижу его, если я вращаю устройство. Если я скрою панель приложений перед просмотром вкладки карты, MapToolbar будет полностью виден.
XML Portrait Landscape Collapsed
Как я могу исправить XML, так что MapToolbar всегда виден (и позволяет Сворачивание панели инструментов)?

ответ

0

Я делал это раньше, он может всплывать в проекте MapToolbar, взгляните на UpcomingFragmenthere, чтобы настроить карту.

Для всего проекта вы можете получить here для проверки. Просто перейдите к third tab и click the marker, он закроет MapToolbar за красной кнопкой. В вашем проекте у вас нет красной кнопки, так что это не имеет значения.

Пример код для установки карты:

public class UpcomingFragment extends Fragment { 

    private SupportMapFragment mMapView; 

    public static UpcomingFragment newInstance(String param1, String param2) { 
     UpcomingFragment fragment = new UpcomingFragment(); 
     return fragment; 
    } 

    MapView mapView; 
    GoogleMap map; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_upcoming, container, false); 
     // Gets the MapView from the XML layout and creates it 

     MapsInitializer.initialize(getActivity()); 


     switch (GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity())) { 
      case ConnectionResult.SUCCESS: 
       Toast.makeText(getActivity(), "SUCCESS", Toast.LENGTH_SHORT).show(); 
       mapView = (MapView) v.findViewById(R.id.map); 
       mapView.onCreate(savedInstanceState); 
       // Gets to GoogleMap from the MapView and does initialization stuff 
       if (mapView != null) { 
        map = mapView.getMap(); 
        map.getUiSettings().setMyLocationButtonEnabled(false); 
        map.setMyLocationEnabled(true); 
        CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(43.1, -87.9), 10); 
        map.animateCamera(cameraUpdate); 
       } 
       break; 
      case ConnectionResult.SERVICE_MISSING: 
       Toast.makeText(getActivity(), "SERVICE MISSING", Toast.LENGTH_SHORT).show(); 
       break; 
      case ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED: 
       Toast.makeText(getActivity(), "UPDATE REQUIRED", Toast.LENGTH_SHORT).show(); 
       break; 
      default: 
       Toast.makeText(getActivity(), GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity()), Toast.LENGTH_SHORT).show(); 
     } 

     // Updates the location and zoom of the MapView 

     LatLng sydney = new LatLng(-33.867, 151.206); 

     map.setMyLocationEnabled(true); 
     map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 13)); 

     map.addMarker(new MarkerOptions() 
       .title("Sydney") 
       .snippet("The most populous city in Australia.") 
       .position(sydney)); 

     return v; 
    } 

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

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

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

и связанный с XML для этого:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

    <com.google.android.gms.maps.MapView 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:name="com.bojie.materialtest.fragments.UpcomingFragment"/> 

</RelativeLayout> 
+0

Я клонировал свой репозиторий, и она работала. Однако - это не работает, когда я реализую его как вы (с помощью MapView и вызывает MapsInitializer, onCreate, onDestroy, onLowMemory. Я также пробовал добавлять onResume и onSaveInstanceState, но не сигары). Я пробовал оба с устаревшим методом getMap и getMapAsync. Следующий шаг? : О, сумасшедший здесь. – pepefatha

+0

В чем проблема? Можете ли вы показать свой «logcat»? Вы изменили свой xml-макет для «MapView»? – bjiang

+0

Вам это помогает? Если да, примите, спасибо. – bjiang

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