id
Anko で属性を使用してビューを識別できることはわかっています。
class MainActivityUI : AnkoComponent<MainActivity> {
override fun createView(ui: AnkoContext<MainActivity>) = with(ui) {
frameLayout {
textView {
id = R.id.text
}
}
}
}
次に、関数を使用して(または Kotlin Android 拡張機能Activity
を使用して) 取得します。find()
class MainActivity : AppCompatActivity() {
private val textView by lazy {
find<TextView>(R.id.text)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
MainActivityUI().setContentView(this)
textView.text = "Hello World"
}
}
しかし、何かが欠けているように感じます。READMEfind
が関数または Kotlin Android 拡張機能について言及している唯一の場所は、Supporting Existing Codeというタイトルのセクションにあります。
すべての UI を Anko で書き直す必要はありません。Java で記述された古いクラスを保持できます。さらに、何らかの理由で Kotlin アクティビティ クラスを作成し、XML レイアウトを拡張する必要がある (または作成しなければならない) 場合は、View プロパティを使用すると、作業が簡単になります。
// Same as findViewById(), simpler to use val name = find<TextView>(R.id.name) name.hint = "Enter your name" name.onClick { /*do something*/ }
Kotlin Android 拡張機能を使用すると、コードをさらにコンパクトにすることができます。
find
これにより、この関数は「古い」XML コードのサポートのみを目的としているように見えます。
私の質問はこれです。Anko を使用してから関数にアクセスする正しい方法とid
一緒に を使用していますか? これを処理するより「あんこ」な方法はありますか?それとも、関係のないものからアクセスする Anko の他の利点を見逃していますか?find
View
Activity
View
Activity
そして2番目の関連する質問; これがView
からにアクセスする正しい方法である場合、 内からリソース (つまり)Activity
を作成する方法はありますか? ファイルにそれぞれを作成するのではなく。id
"@+id/"
AnkoComponent
id
ids.xml