私は次のレイアウトを持っています:
<?xml version="1.0" encoding="utf-8"?>
<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"
Android:background="@Android:color/white"
Android:paddingLeft="20dp"
Android:paddingRight="20dp">
<TextView
Android:id="@+id/tvErrorTitle"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="10dp"
Android:textColor="@Android:color/background_dark"
Android:textSize="18sp"
/>
<TextView
Android:id="@+id/tvErrorDesc"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="30dp"
Android:textColor="@Android:color/darker_gray"
Android:textSize="16sp"
/>
<TextView
Android:id="@+id/tvAction"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="30dp"
Android:layout_marginBottom="10dp"
Android:layout_gravity="end"
Android:padding="5dp"
Android:textSize="15sp"
Android:textStyle="bold"
Android:textAllCaps="true"
Android:textColor="@Android:color/holo_purple"
/>
</LinearLayout>
以下のようなアクティビティ以外で kotlin Android extensions を使用したい場合、機能しません。最終的にfindViewByIdを実行しました。
...
...
import kotlinx.Android.synthetic.main.dialog_error.*
...
...
val view = LayoutInflater.from(context).inflate(R.layout.dialog_error, null, false)
val tvErrorTitle = view.findViewById(R.id.tvErrorTitle) as TextView
val tvErrorDesc = view.findViewById(R.id.tvErrorDesc) as TextView
val tvErrorAction = view.findViewById(R.id.tvAction) as TextView
ビューをxmlから直接プルすることはありません。プログラム的に膨らんだレイアウトでそれを使用してfindViewById
を避ける方法は?
注:この質問は厳密には Kotlin Android Extensions に属し、言語そのものではありません。
Edit両方をインポートしました:
import kotlinx.Android.synthetic.main.dialog_error.view.*
import kotlinx.Android.synthetic.main.dialog_error.*
しかしAndroid StudioはR.idからのインポートを試みますが、これら2つのインポートを認識しません。不足しているものはありますか?
リンクしたドキュメント から:
Viewで合成プロパティを呼び出したい場合(アダプタークラスで有用)、インポートする必要があります
kotlinx.Android.synthetic.main.activity_main.view.*.
つまり、インポートkotlinx.Android.synthetic.main.layout.view.*
同様に、View
拡張プロパティをロードします。
次に:
val view = LayoutInflater.from(context).inflate(...)
view.tvErrorTitle.text = "test"
膨張したビューを返します。
layoutInflater.inflate(R.layout.your_layout, null)
クラスをContextスーパークラスから拡張する場合、このLayoutInflater.from(context)
をこのlayoutInflater
に置き換えることができます