4

オブジェクトのフィールド (文字列、整数など) をレイアウト ファイルにバインドしています。例えば:

  <data>
    <variable
        name="appState"
        type="com.example.app.AppState"
        />
  </data>

  <android.support.v7.widget.Toolbar
      android:id="@+id/toolbar"
      android:layout_width="match_parent"
      android:layout_height="?attr/actionBarSize"
      android:background="?attr/colorPrimary"
      android:title="@{appState.thing}"
      />

これはうまくいきます。ただし、HashMapその appState オブジェクトには of の値もあります。

これから値にバインドすることは可能android:text="@{appState.thehashmap['thekey']"ですか?

現在の式の構文は、それをサポートしていないようです。

しかし、私は疑問に思います、方法はありますか?どうもありがとう。

4

2 に答える 2

8

さて、ドキュメントをより詳しく見ると、次のようになります。

あなたHashMapがこのようなものなら:

  public HashMap<String, String> thing = new HashMap<String, String>() {{
    put("stuff", "yeah");
  }};

  public HashMap<String, String> getThing() {
    return thing;
  }

  public void setThing(HashMap<String, String> thing) {
    this.thing = thing;
  }

次に、レイアウト ファイルは次のようになります。

  <data>
    <import type="java.util.HashMap"/>
    <variable
        name="appState"
        type="com.example.app.AppState"
        />
  </data>
  ...
  <android.support.v7.widget.Toolbar
      android:id="@+id/toolbar"
      android:layout_width="match_parent"
      android:layout_height="?attr/actionBarSize"
      android:background="?attr/colorPrimary"
      android:title='@{appState.thing["stuff"]}'
      />
于 2016-02-25T04:19:51.387 に答える
1

最も簡単な方法は次のとおりです。 inside[]を提供することにより、演算子で直接呼び出すことができます。key[]

したがって、次のようなマップがある場合:

<data>
    <import type="java.util.Map"/>

    <variable name="map" type="Map&lt;String, String&gt;"/>

</data>
...
android:text="@{map[key]}"

ソース: https://developer.android.com/topic/libraries/data-binding/index.html

于 2016-08-28T20:05:42.510 に答える