[解決済み] ViewBinding - インクルードされたレイアウトのバインディングを取得する方法は?
2022-04-24 15:25:12
質問
ViewBindingを使用しているとき、いくつかの文書化されていないケースに遭遇しました。
1つ目:メインバインディングはメインレイアウトのアイテムのみを表示し、含まれる汎用ビューレイアウトパーツのバインディングを取得する方法?
2つ目: どのようにマージタイプのレイアウトパーツを含むバインディングを取得しますか?
どうすればいいですか?
の場合。
- 一般的なレイアウトでインクルードする場合(マージノードではない)、インクルードされたパーツにIDを割り当てる必要がある、こうすればバインディングでインクルードされたサブパーツにアクセスできる
<include
android:id="@+id/your_id"
layout="@layout/some_layout" />
このようにアクティビティコードに
private lateinit var exampleBinding: ActivityExampleBinding //activity_example.xml layout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
exampleBinding = ActivityExampleBinding.inflate(layoutInflater)
setContentView(exampleBinding.root)
//we will be able to access included layouts view like this
val includedView: View = exampleBinding.yourId.idOfIncludedView
//[...]
}
- 外部レイアウトのマージブロックにインクルードします。マージブロックはビューではないので、それにIDを追加することはできません。 このような永遠のマージレイアウト(merge_layout.xm)を持っているとしましょう。
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="@layout/activity_example">
<TextView
android:id="@+id/some_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World" />
</merge>
このようなマージレイアウトを適切にバインドするためには、次のようなことが必要です。
アクティビティコードの中で
private lateinit var exampleBinding: ActivityExampleBinding //activity_example.xml layout
private lateinit var mergeBinding: MergeLayoutBinding //merge_layout.xml layout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
exampleBinding = ActivityExampleBinding.inflate(layoutInflater)
//we need to bind the root layout with our binder for external layout
mergeBinding = MergeLayoutBinding.bind(exampleBinding.root)
setContentView(exampleBinding.root)
//we will be able to access included in merge layout views like this
val mergedView: View = mergeBinding.someView
//[...]
}
関連
-
adb シェルがデバイスのオフラインを求めるプロンプトを表示する
-
Android端末にADBが接続できない!を解決。理由: デバイスが認証されていない!
-
cygwinのダウンロード、インストールチュートリアル、およびCDTの「makeプログラムがパスに見つからない」バグの解消
-
ジャークとして。起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりません アクティビティ起動中のエラー
-
Android: インポートモジュールエラー Android リソースのリンクに失敗しました
-
ArrayAdapter は、リソース ID が TextView であることが必要です。
-
WeChatとQQは、他のアプリのオープンリストに自分のアプリを追加し、ファイルパスを取得することができます
-
[解決済み] Androidで画面の大きさをピクセル単位で取得する方法
-
[解決済み] Androidで現在の時刻と日付を取得する方法
-
[解決済み] グリッドレイアウトにおけるフリングジェスチャーの検出
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
AndroidでAttempt to invoke virtual method... on null object referenceの例外が発生する。
-
cygwinのダウンロード、インストールチュートリアル、およびCDTの「makeプログラムがパスに見つからない」バグの解消
-
ジャークとして。起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりません アクティビティ起動中のエラー
-
ArrayAdapter は、リソース ID が TextView であることが必要です。
-
指定された子にはすでに親がいます。まず、その子の親に対して removeView() をコールする必要があります。
-
android exception - aapt.exe has stopped working.
-
Androidで、onTouchEventでダブルクリックを実装し、ダブルクリックイベントとして判定する方法
-
Android Get set image.setImageResource(R.drawable.xxx) リソース
-
android studioが新しいプロジェクトを作成しますが、プロジェクトの同期に成功するまでデザインエディタが使用できません。
-
アンドロイドにおけるトークンの利用