SupportMapFragment中如何使用View绑定?
How to Use View binding in SupportMapFragment?
如何在SupportMapFragment中使用View绑定?参考我的代码
我在布局中有一个地图片段,我想在片段中使用视图绑定。
val mapFragment = childFragmentManager.findFragmentById(R.id.map) as
SupportMapFragment
Plz需要解决方案..
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.SupportMapFragment
import com.zeddigital.zigmaster.R
import com.zeddigital.zigmaster.databinding.FragmentHomeBinding
class HomeFragment : Fragment() {
private lateinit var mMap: GoogleMap
private var binding : FragmentHomeBinding ?=null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentHomeBinding.inflate(inflater)
// binding.myTextView.text = "sample"
val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync { googleMap ->
}
return binding!!.root
}
override fun onDestroyView() {
super.onDestroyView()
binding=null
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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=".ui.home.HomeFragment">
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
我不完全理解这个问题,因为它感觉不完整。但是,如果您想对 MapFragment 的 ID 使用视图绑定,如下面引用的赏金消息中所述:
How to use View binding in SupportMapFragment' ID?
你能做的就是写
val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
作为
val mapFragment = childFragmentManager.findFragmentById(binding.map.id) as SupportMapFragment
这将防止它为 null,我相信这正是您想要的。
以上答案是正确的,但对于最新的 Android Studio,我发布了一些代码更改。
从现在开始建议使用<androidx.fragment.app.FragmentContainerView />
而不是<fragment />
。
现在您可以使用视图绑定如下:
对于Java:
SupportMapFragment mapFragment = (SupportMapFragment) childFragmentManager.findFragmentById(binding.map.getId());
对于 Kotlin:
val mapFragment = childFragmentManager.findFragmentById(binding.map.id) as SupportMapFragment
如何在SupportMapFragment中使用View绑定?参考我的代码
我在布局中有一个地图片段,我想在片段中使用视图绑定。
val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
Plz需要解决方案..
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.SupportMapFragment
import com.zeddigital.zigmaster.R
import com.zeddigital.zigmaster.databinding.FragmentHomeBinding
class HomeFragment : Fragment() {
private lateinit var mMap: GoogleMap
private var binding : FragmentHomeBinding ?=null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentHomeBinding.inflate(inflater)
// binding.myTextView.text = "sample"
val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync { googleMap ->
}
return binding!!.root
}
override fun onDestroyView() {
super.onDestroyView()
binding=null
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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=".ui.home.HomeFragment">
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
我不完全理解这个问题,因为它感觉不完整。但是,如果您想对 MapFragment 的 ID 使用视图绑定,如下面引用的赏金消息中所述:
How to use View binding in SupportMapFragment' ID?
你能做的就是写
val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
作为
val mapFragment = childFragmentManager.findFragmentById(binding.map.id) as SupportMapFragment
这将防止它为 null,我相信这正是您想要的。
以上答案是正确的,但对于最新的 Android Studio,我发布了一些代码更改。
从现在开始建议使用<androidx.fragment.app.FragmentContainerView />
而不是<fragment />
。
现在您可以使用视图绑定如下:
对于Java:
SupportMapFragment mapFragment = (SupportMapFragment) childFragmentManager.findFragmentById(binding.map.getId());
对于 Kotlin:
val mapFragment = childFragmentManager.findFragmentById(binding.map.id) as SupportMapFragment