6

idAnko で属性を使用してビューを識別できることはわかっています。

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 の他の利点を見逃していますか?findViewActivityViewActivity


そして2番目の関連する質問; これViewからにアクセスする正しい方法である場合、 内からリソース (つまり)Activityを作成する方法はありますか? ファイルにそれぞれを作成するのではなく。id"@+id/"AnkoComponentidids.xml

4

4 に答える 4