2017-03-01 11 views
0

アンドロイドデータバインディングに問題があります。現在、私はsetContentViewメソッドを使用するときにレイアウト名を渡すだけで、コンテンツビューを設定するレイアウトを自動的に検出する必要があります。複数のレイアウトを持つAndroidデータバインド

しかし、データバインディングを使用すると、その解決策は何でしょうか。 私が知っているように、バインディングの名前は設定によって異なります。ですから、ActivityMainBindingを使用すると、常に同じレイアウトのデータバインディングになります。私はマーカー(各設定のbool)を指定し、if/elseステートメントを使用して必要なバインディングを膨らませるソリューションについて読んだが、それはとても悪い解決策である。

は、誰もが活動/フラグメントは異なる構成のレイアウト/ポート/ SW600-ポート/土地など

感謝を別のレイアウトを使用した場合のよりよい解決策を提案することができます!

答えて

2

あなたは同じようにそれを使用することができます生成されActivityMainBindingクラスが一致するすべてのレイアウトのバインディングのための基底クラスとなり、すべての変数/フィールドの集計を持つことになります

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ActivityMainBinding binding = DataBindingUtil.setContentView(this, 
     R.layout.activity_main); 
    // set all variables in binding 
} 

。一部のレイアウトでViewsのみが使用されている場合、一部の設定ではフィールド参照の一部がnullになることがあるので注意してください。ほとんどの場合、データバインディング式を使用して値を設定したり、イベントハンドラをアタッチしたりすると、Viewフィールド参照を使用する必要がなくなり、心配する必要はありません。

異なるレイアウトで異なるタイプのビューがある場合は、共通の基本クラスがビューフィールドに使用されます。

生成されたコードは、ビルドフォルダを見るといつでも見ることができます。あなたはそれがどのように実装されているのか興味深いかもしれません。

+0

ありがとう@George!本当に素晴らしい答え! – sromanov

関連する問題