Часть в макете:

<data>
    <import type="android.view.View"></import>
    <variable
        name="tags"
        type="java.util.HashMap"></variable>
</data>

Посмотреть xml:

<com.google.android.flexbox.FlexboxLayout
        android:id="@+id/overview_customerHashtags"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:alignContent="flex_start"
        app:alignItems="flex_start"
        app:flexWrap="wrap"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/overview_tokenTimeout"
        app:tags="@{tags}">
</com.google.android.flexbox.FlexboxLayout>

Мой адаптер привязки:

@BindingAdapter("tags")
public static void setTags(FlexboxLayout flexboxLayout, HashMap<Integer, HashtagModel> hashtags) {
    for (HashtagModel hashtagModel : hashtags.values()) {
        flexboxLayout.removeAllViews();
        HashtagButton button = new HashtagButton(flexboxLayout.getContext(), hashtagModel.getCategory());
        int resId = flexboxLayout.getContext().getResources().getIdentifier(hashtagModel.getTitle().toUpperCase(), "string", flexboxLayout.getContext().getPackageName());
        if (resId == 0) {
            button.setText(hashtagModel.getDefault_text());
        } else {
            button.setText(flexboxLayout.getContext().getResources().getString(resId));
        }
        flexboxLayout.addView(button);
    }
}

Он продолжает выдавать эту ошибку:

Ошибка: (162, 29) Не удается найти установщик для атрибута app: tags с типом параметра java.util.HashMap на com.google.android.flexbox.FlexboxLayout.

Любое предложение? Спасибо.

2
Mehmet Kemal Bayer 26 Фев 2018 в 14:09

1 ответ

Лучший ответ

Если вы используете HashMap для привязки к представлению xml. Реализация выглядит так

Создайте модель для методов получения и установки HashMap:

public HashMap<String, String> thing = new HashMap<String, String>() {{
    put("tag 1", "tag 2");
  }};    
  public HashMap<String, String> getTag() {
    return thing;
  }   
  public void setTag(HashMap<String, String> tag) {
    this.thing = thing;
  }

Внутри xml:

  <data>
    <import type="android.view.View"></import>
     <variable
      name="thing"
      type="java.util.HashMap"></variable>
   </data>

  <com.google.android.flexbox.FlexboxLayout
            android:id="@+id/overview_customerHashtags"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:alignContent="flex_start"
            app:alignItems="flex_start"
            app:flexWrap="wrap"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/overview_tokenTimeout"
            app:tags="@{thing["tag 1"]}">
        </com.google.android.flexbox.FlexboxLayout>
0
Hemant Parmar 26 Фев 2018 в 14:23