#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)