2017-04-23 20 views
5

Mam układ z niektórych poglądów, jeden z nich ma identyfikator title_whalemareKotlin przedłużenie syntetyczny do widzenia

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 
    } 
} 

próbuję odnaleźć ją kotlin extensions, ale nie mogę, bo pojawia się następujący błąd

Żadna z następujących kandydatów stosuje się ze względu na typ odbiornika niedopasowania 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> 

Gdzie jest mój błąd?

Odpowiedz

6

Błąd, który próbujesz powiedzieć, polega na tym, że dostęp do widoków z rozszerzeniami można uzyskać tylko z poziomu Activity lub Fragment. Dzieje się tak dlatego, że robi to samo, aby znaleźć widoki z podanymi ID, co robisz ręcznie, po prostu dzwoni Activity.findViewById() i Fragment.getView().findViewById(), a następnie wykonuje rzutowanie na określoną podklasę View. Zgaduję, że Twój kontroler nie jest Activity lub Fragment.

Istnieje inny sposób korzystania z rozszerzeń, jeśli w jakiś sposób można przekazać widok główny widoku układu do kontrolera. Następnie można wykonać następujące czynności:

val title: TextView = rootView.title_whalemare 

Ponownie, jest to po prostu zastępując połączenia View.findViewById() i wprowadź obsady.