2017-04-23 90 views
5

我有一些意見的佈局,其中一人有ID title_whalemare科特林合成擴展視圖

import kotlinx.android.synthetic.main.controller_settings.* 
import kotlinx.android.synthetic.main.view_double_text.* 

class MainSettingsController : BaseMvpController<MvpView, MvpPresenter>() { 

    val title: TextView = title_whalemare 

    override fun getLayout(): Int { 
     return R.layout.controller_settings 
    } 
} 

我嘗試用kotlin extensions找到它,但我不能,因爲我得到以下錯誤

無以下候選人的是因爲接收器類型不匹配的適用 None of the following candidates is applicable because of receiver type mismatch

controller_settings.xml

<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" 
       android:orientation="vertical"> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/title_whalemare"/> 

</LinearLayout> 

我的錯誤在哪裏?

回答

6

該錯誤試圖告訴您的是,您只能從ActivityFragment內使用擴展訪問視圖。這是因爲它完全一樣,可以通過手動方式查找具有給定ID的視圖,只需調用Activity.findViewById()Fragment.getView().findViewById(),然後將類型轉換爲View的特定子類。我猜你的控制器不是ActivityFragment

如果您可以以某種方式將佈局的根視圖傳遞給控制器​​,還有另一種使用擴展的方式。然後,你可以做到以下幾點:

val title: TextView = rootView.title_whalemare 

再次,這是剛剛更換View.findViewById()調用和類型轉換。