2017-04-23 29 views
5

Tôi có một bố trí với một số quan điểm, một trong số họ có id title_whalemareKotlin mở rộng tổng hợp để xem

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

tôi cố gắng tìm nó với kotlin extensions, nhưng tôi có thể không phải vì tôi nhận được lỗi sau

Không ai trong số những ứng cử viên sau đây được áp dụng vì nhận loại không phù hợp 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> 

Lỗi của tôi ở đâu?

Trả lời

6

Lỗi nào đang cố gắng cho bạn biết là bạn chỉ có thể truy cập chế độ xem với Tiện ích mở rộng từ một trong số Activity hoặc Fragment. Điều này là do nó thực hiện chính xác điều tương tự để tìm các khung nhìn với các ID đã cho như những gì bạn muốn làm theo cách thủ công, nó chỉ gọi Activity.findViewById()Fragment.getView().findViewById(), và sau đó thực hiện loại truyền đến lớp con cụ thể của View. Tôi đoán rằng Bộ điều khiển của bạn không phải là Activity hoặc Fragment.

Có một cách khác để sử dụng Tiện ích mở rộng, nếu bạn có thể chuyển vào chế độ xem gốc của bố cục của bạn với bộ điều khiển của bạn bằng cách nào đó. Sau đó, bạn có thể thực hiện các thao tác sau:

val title: TextView = rootView.title_whalemare 

Một lần nữa, đây chỉ là thay thế cuộc gọi View.findViewById() và loại truyền.

Các vấn đề liên quan