私はいくつかのビューのあるレイアウトを持っています。そのうちの1つはtitle_whalemare
というIDを持っています
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>
私の間違いはどこですか?
エラーが伝えようとしているのは、Activity
またはFragment
内からのみ拡張機能付きのビューにアクセスできることです。これは、指定されたIDを持つビューを手動で実行するのとまったく同じように検索し、Activity.findViewById()
およびFragment.getView().findViewById()
を呼び出してから、型を実行するためです。 View
の特定のサブクラスにキャストします。あなたのコントローラーがActivity
でもFragment
でもないと思います。
何らかの方法でレイアウトのルートビューをコントローラーに渡すことができる場合、拡張機能を使用する別の方法があります。次に、以下を実行できます。
_val title: TextView = rootView.title_whalemare
_
繰り返しますが、これはView.findViewById()
呼び出しと型キャストを置き換えるだけです。