Если привязка к просмотру и GoogleMap используются вместе, возникнет ошибка

#android #kotlin

#Android #kotlin

Вопрос:

класс

 override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    var viewBinding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(R.layout.activity_main)
}
 

макет

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <fragment
        android:id="@ id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MapsActivity" />
</LinearLayout>
 

введите описание изображения здесь

Если вы пишете ViewBinding и GoogleMap вместе, возникнет ошибка. Если вы удалите ViewBinding, ошибка не возникнет. В чем причина?

Ответ №1:

Вот как вы должны выполнять привязку к просмотру с помощью действия:

 private lateinit var binding: ResultProfileBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ResultProfileBinding.inflate(layoutInflater)
    val view = binding.root
    setContentView(view) } ```
 

Как вы можете видеть, идентификатор ресурса макета не используется, а вместо него используется представление из привязки.

источник: https://developer.android.com/topic/libraries/view-binding

А затем, как вы устанавливаете SupportMapFragment в xml:

  <fragment
    class="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
 

Использование class вместо android:name

источник: https://developers.google.com/android/reference/com/google/android/gms/maps/SupportMapFragment

Нет ничего плохого в том, что SupportMapFragment и ViewBinding работают вместе.

Ответ №2:

 var viewBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(R.layout.activity_main)
 

должно быть

 val viewBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(viewBinding.root)