我正在尝试在一个片段中实现一个地图,并且能够显示该地图,但是systemctl start tomcat
systemctl enable tomcat
无法正常工作,因为它没有添加标记,也没有移动相机。
代码
MapFragment
onMapReady
xml
class MapFragment : Fragment(), OnMapReadyCallback {
private lateinit var mMap: GoogleMap
companion object {
var mapFragment : SupportMapFragment?=null
val TAG: String = MapFragment::class.java.simpleName
fun newInstance() = MapFragment()
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
var rootView = inflater.inflate(R.layout.fragment_map, container, false)
mapFragment = fragmentManager?.findFragmentById(R.id.fallasMap) as SupportMapFragment?
mapFragment?.getMapAsync(this)
return rootView
}
override fun onMapReady(googleMap: GoogleMap?) {
mMap = googleMap!!
// Add a marker in Sydney and move the camera
val sydney = LatLng(-34.0, 151.0)
mMap.addMarker(MarkerOptions().position(sydney).title("Marker in Sydney"))
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney))
}
}
答案 0 :(得分:1)
您应该将Value googleMap传递给mMap并与标记一起传递给InterAct
override fun onMapReady(googleMap: GoogleMap?) {
mMap = googleMap
// Add a marker in Sydney and move the camera
val sydney = LatLng(-34.0, 151.0)
mMap.addMarker(MarkerOptions().position(sydney).title("Marker in
Sydney"))
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney))
}
答案 1 :(得分:1)
您使用了错误的片段管理器来访问它。由于它是片段中的一个片段,因此将其添加到childFragmentManager
中。
childFragmentManager.findFragmentById(R.id.fallasMap) as SupportMapFragment
也可以使用as?
强制转换运算符,而不是强制转换为可选类型。甚至进行常规转换,因为您需要正确的片段并且null
将是一个错误。
如果未正确清理片段,也不要存储对该片段的静态引用。
答案 2 :(得分:0)
在您的情况下全局共享这些变量是不正确的,您应该从companion object
中删除它们,并在每次打开片段时创建一个新实例。
当rootView != null
onMapReady
方法不会被调用时。
因此,我建议将其从companion object
中删除,然后将其放入onCreateView
中,且不附加条件if (rootView == null)
(除去条件)。
答案 3 :(得分:0)
使用
supportFragmentManager
查找SupportMapFragment
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
var rootView = inflater.inflate(R.layout.fragment_map, container, false)
mapFragment = supportFragmentManager?.findFragmentById(R.id.fallasMap) as SupportMapFragment?
mapFragment?.getMapAsync(this)
return rootView
}
如果您不自定义片段,那么也可以在XML文件中
<fragment
android:id="@+id/fallasMap"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
答案 4 :(得分:0)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val mapFragment = activity?.supportFragmentManager?.findFragmentById(R.id.map) as SupportMapFragment?
mapFragment?.getMapAsync(this)
}