2017-07-28 92 views
0
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View { 
var view: View = inflater?.inflate(R.layout.map_fragment, null)!! 

var mapFragment : SupportMapFragment?=null 
mapFragment= fragmentManager.findFragmentById(R.id.map) as SupportMapFragment 
mapFragment.getMapAsync(this) 

return view 
} 

的logcat:科特林与地图Android中

FATAL EXCEPTION: main 
kotlin.TypeCastException: null cannot be cast to non-null type 
com.google.android.gms.maps.SupportMapFragment 
at example.com.kotlinexamplebydimple.Mapfragment.onCreateView(Mapfragment.kt:36) 

在此线路上错误显示:

mapFragment= fragmentManager.findFragmentById(R.id.map) as SupportMapFragment 
+0

没有初始化的fragmentManager –

+0

其getFragmentManager方法是直接使用 –

回答

2

你宣布mapFragment为可以为空,所以你不得不面对它:

var mapFragment : SupportMapFragment?=null 
mapFragment = fragmentManager.findFragmentById(R.id.map) as SupportMapFragment? 
mapFragment?.getMapAsync(this) 
+0

是它的工作对我非常感谢 –

+0

与使用,你可以声明'mapFragment'是一个'val'。因为只有当它更安全时才分配它,因为它可以防止将其重新分配给另一个值。 IDE可能会告诉你 – Pelocho

0

错误意味着您试图将null投射到SupportMapFragment。所以,首先检查类型会更安全。

val mapFragment = fragmentManager.findFragmentById(R.id.map) 
if (mapFragment is SupportMapFragment) { 
    mapFragment.getMapAsync(this) 
}