2015-10-23 4 views
32

私はkotlinを新しくしました。私は見つけて、ActivityクラスのメソッドfindViewByIdを迷惑にする代わりに合成メソッドを使用しようとしましたが、私は "Viewの合成プロパティ(アダプタクラスで便利です)を呼び出したい場合、kotlinx.android.synthetic .main.view。*。 "しかし、私はそれが正確にどのように動作するか把握することはできません?例はありますか? アダプターまたはViewHolderでKotlin合成

import kotlinx.android.synthetic.main.view.* 

だから今の代わり

は、例えば、 findView(R.id.textView) as TextViewあなただけ textViewを記述します。

答えて

1

は、それはあなたのソースファイルの先頭に次の行を配置しなければならないことを意味します。後者はパッケージkotlinx.android.synthetic.main.viewにある合成拡張プロパティです。そのため、すべてのものをインポートする必要があります。

tutorial on the official siteがあります。 https://github.com/antoniolg/Kotlin-for-Android-Developers

import kotlinx.android.synthetic.item_forecast.view.* 

class ForecastListAdapter() : RecyclerView.Adapter<ForecastListAdapter.ViewHolder>() { 

    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) { 

     fun bindForecast(forecast: Forecast) { 
      itemView.date.text = forecast.date.toDateString() 
     } 
    } 
} 

から

+1

私はまだそれを見てきました。上記のように私は自分の活動のためにやっています。しかし、BaseAdapterのデリバティブの中でどのように使用することができますか? – busylee

+1

基本的には、 'holder.findViewById(R.id.name)'のように、 'view'に対して' findViewById() 'メソッドを呼び出すことができます。 Kotlin Android Extensionsでは 'holder.name'だけ書くことができます。 このコードが 'getView()'関数の中に書かれているとします: 'val base = inflater.inflate(R.layout.list_item、parent、false)' 'base.name.text =" John Smith "' – yanex

+0

しかし、さまざまなレイアウトのビューホルダーをいくつか使用する必要がある場合はどうすればよいですか?どのように私は合成でそれを実現することができますか?なぜなら私たちはレイアウトごとに特定の "合成リンク"を使用しなければならず、同様のIDを持つ複数のレイアウトがあるからです。 –

44

簡単な例

val view = itemView.findViewById(R.id.date) as TextView 
view.text = forecast.date.toDateString() 

だけ

itemView.date.text = forecast.date.toDateString() 

シンプルかつ効果的な書き込みをする必要はありません!

+1

これは間違った質問かもしれませんが、 'itemView'リファレンスはどこから来たのですか? –

+0

大丈夫、私は.viewが見つからないことに気づいた。輸入の一部。 これで、itemViewリファレンスが利用可能になりました。これは、v7サポートパッケージのRecyclerView.ViewHolderクラスから来ているようです。 Tks –

+0

ええ、私はitemviewが作成されて参照してください? –

4

あなたは

import kotlinx.android.synthetic.row_wall.view.* 

以降の線に沿って何か必要があります。ポイントはビューということである

convertView.titleText.text = item.title 

を* Viewクラスの拡張機能を紹介します。

8

Kotlingが

さらに情報を1.1.4:https://antonioleiva.com/kotlin-android-extensions/

ですから、あなたにbuild.gradleこれを追加し、それらを有効にする必要があります。Kotlinのこの新しいバージョンので

apply plugin: 'org.jetbrains.kotlin.android.extensions' 
androidExtensions { 
    experimental = true 
} 

をAndroid拡張にはいくつかの興味深い機能が組み込まれています:どのクラスのキャッシュ(興味深いことにViewHolderも含む)

012 ViewHolder(または任意のカスタムクラス)にそれを使用して

class ViewHolder(override val containerView: View) : RecyclerView.ViewHolder(containerView), 
     LayoutContainer { 

    fun bind(title: String) { 
     itemTitle.text = "Hello Kotlin!" 
    } 
} 
+2

この情報に追加する:Kotlin 1.1.4によると、この機能は実験的なものであり、build.gradleファイルで有効にする必要があります – Miquel

関連する問題