我有一些包含一些视图的布局,其中一个有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
找到它,但我无法解决,因为我收到以下错误
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>
我的错误在哪里?
答案 0 :(得分:20)
该错误试图告诉您,您只能在Activity
或Fragment
内访问包含扩展程序的视图。这是因为找到具有给定ID的视图与您手动执行的操作完全相同,只需调用Activity.findViewById()
和Fragment.getView().findViewById()
,然后执行类型转换为View
的特定子类。我猜测您的控制器不是Activity
或Fragment
。
如果您可以以某种方式将布局的根视图传递给控制器,那么还有另一种使用扩展的方法。然后你可以做以下事情:
val title: TextView = rootView.title_whalemare
同样,这只是替换View.findViewById()
调用和类型转换。