Уже второй день пытаюсь прикрутить google карту, но все четно. В основном, брал инфу из документации google. Так же пробовал другие пути решения данной проблемы.
При сборке приложения, постоянно выходит одна и та же ошибка и почему то ссылается всегда на строку, где я инициализировал binding binding = DataBindingUtil.setContentView(this, R.layout.activity_screen_map);
Прошу помощи у более опытных коллег.
Кусок верстки с фрагментом
<fragment
android:id="@+id/mapView"
class="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
style="@style/toolbar"/>
</android.support.constraint.ConstraintLayout>
Сам класс реализации:
private SupportMapFragment mapFragment; private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen_map);
//Getting an instance
binding = DataBindingUtil.setContentView(this, R.layout.activity_screen_map);
googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
googleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, googleSignInOptions)
.build();
mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapView);
mapFragment.getMapAsync(this);
//Call the toolbar
setSupportActionBar(binding.toolbar);
binding.toolbar.setTitle(getResources().getString(R.string.mapTitle));
}
@Override
public void onMapReady(GoogleMap gMap) {
googleMap = gMap;
LatLng sydney = new LatLng(-33.852, 151.211);
googleMap.addMarker(new MarkerOptions().position(sydney)
.title("Marker in Sydney"));
googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
Манифест:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
<activity android:name=".MainActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ScreenMapActivity"
android:screenOrientation="portrait"/>
<activity android:name=".ScreenFamilyActivity"
android:label="@string/contacts"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:parentActivityName=".ScreenMapActivity"/>
<activity android:name=".AddContactActivity"
android:label="@string/addContact"></activity>
</application>
Все нужные зависимости подключены.
Сама ошибка:
android.view.InflateException: Binary XML file line #11: Error inflating class fragment
11 строка, это как раз строка где начинается фрагмент. Уже всю голову сломал себе.
Так же вот еще ниже ошибка Binary XML file line #11: Duplicate id 0x7f08006e, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.SupportMapFragment
Там написано, что два одинаковых id. Я проверил все и ни чего не нашел.
Прошу не кидаться камнями, я только не давно начал изучать android и нуждаюсь в реальной помощи.
Проблема решена. Я до этого пробовал использовать MapView, но несколько иначе. Вчера пересмотрел данный подход и решил попробовать еще раз.
Вообщем код ниже.
Bundle mapViewBundle = null;
if (savedInstanceState != null) {
mapViewBundle = savedInstanceState.getBundle(MAP_VIEW_BUNDLE_KEY);
}
mapView = binding.mapV;
mapView.onCreate(mapViewBundle);
mapView.getMapAsync(this);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Bundle mapViewBundle = outState.getBundle(MAP_VIEW_BUNDLE_KEY);
if (mapViewBundle == null) {
mapViewBundle = new Bundle();
outState.putBundle(MAP_VIEW_BUNDLE_KEY, mapViewBundle);
}
mapView.onSaveInstanceState(mapViewBundle);
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
@Override
protected void onPause() {
mapView.onPause();
super.onPause();
}
@Override
protected void onDestroy() {
mapView.onDestroy();
super.onDestroy();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
@Override
public void onMapReady(GoogleMap googleMap) {
gmap = googleMap;
gmap.setMinZoomPreference(12);
LatLng ny = new LatLng(40.7143528, -74.0059731);
gmap.moveCamera(CameraUpdateFactory.newLatLng(ny));
}
Да, и обязательно нужно промапить весь жизненный цикл активити.
На счет прошлой ошибки, если кто то встретит подобную и не поймет из-за чего она происходит.
Как написал в комментах @woesss. Я использовал в работе DataBinding. Из-за включение в activity fragment происходила спорная ситуация. Как я понимаю. Бандинг сам создавал фрагмент, далее пытался проинфлентится сам фрагмент с картой и из-за этого появлялась ошибка Duplicate id. Возможно я ошибаюсь.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Нашел один хороший - Sourcetrail, но он не работает(ошибка 87, не найдена java-либа, подозреваю что ему нужна eclipse-jdt)Есть еще похожие?
При установки кастомной темы setTheme() почему-то меняется только цвет ColorPrimaryDarkВот сама тема
Есть два набора строковых ресурсов: дефолтный (англ) и русскийНеобходимо, установить русский язык, если пользователь выберет белорусский,...