Невозможно установить массив строк для счетчика с помощью привязки данных Android

Теперь у меня есть счетчик, и я хочу загрузить данные в счетчик с функцией привязки данных. Я попытался найти способ объявить массив строк в XML(https://developer.android.com/topic/libraries/data-binding/index.html#expression_language), но удовлетворительный результат не найден.

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:apps="http://schemas.android.com/apk/res-auto">

<data>
    <import type="android.util.SparseArray"/>
    <variable
        name="statuslist"
        type="SparseArray<String>"/>
</data>
...
<android.support.v7.widget.AppCompatSpinner
        android:id="@+id/spn_status"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignStart="@+id/spinner1"
        android:layout_below="@+id/btn2"
        android:entries="@{statuslist}"
        apps:adapter="@{statusAdapter}"/>
</layout>

При сборке появляется следующая ошибка.

Ошибка: не удалось выполнить задачу ':app:dataBindingProcessLayoutsDebug'.

org.xml.sax.SAXParseException; systemId: файл:/C:/Users/../app/build/intermediates/res/merged/debug/layout/testdialog.xml; номер строки: 24; номер столбца: 30; Значение атрибута "type", связанное с типом элемента "null", не должно содержать символ '‹'.

Однако есть что-то запутанное.

  1. Когда я пытался использовать SparseArray, как показано на сайте. Я нашел «Не удается разрешить sysmbol» в XML-редакторе Android Studio.
  2. Я не знаю, является ли это правильным способом установки значения массива для счетчика, поскольку на веб-сайте нет официальных инструкций по привязке данных счетчика.

person Long Ranger    schedule 09.08.2016    source источник
comment
Вы включили привязку данных в build.gradle?   -  person anhtuannd    schedule 09.08.2016
comment
Да, я включаю привязку данных в build.gradle. Вот информация о моей Android Studio (версия: 2.1.2, JavaVersion: 1.7)   -  person Long Ranger    schedule 09.08.2016


Ответы (4)


Вы импортировали SparseArray?

попробуй это :

<data><import type="android.util.SparseArray"/></data>
person FrankOy    schedule 09.08.2016
comment
Я забыл добавить это утверждение в вопрос. Я пробовал это, но это не работает - person Long Ranger; 09.08.2016
comment
SparseArray‹String› измените на SparseArrayString› , попробуйте еще раз - person FrankOy; 09.08.2016
comment
Пробовал этот способ, и он все еще не работает. Не удается разрешить ошибку символа по-прежнему отображается - person Long Ranger; 09.08.2016
comment
‹ — зарезервированный символ в xml. Можете ли вы опустить тип SparseArray. В любом случае, он не существует в скомпилированном коде. - person GPuschka; 09.08.2016
comment
Я имел в виду, что вместо SparseArray‹String› напишите просто SparseArray в поле типа. - person GPuschka; 09.08.2016
comment
Это немного странно, я помню, когда моя Android Studio была версии 1.5, она работала, но теперь у меня та же проблема, Android Studio версии 2.1, это ошибка или что-то в этом роде? Я думаю - person FrankOy; 09.08.2016
comment
@GPuschka, если я использую SparseArray без type , не означает ли это, что эта переменная не является безопасностью типов? Это не было бы решено, если бы я использовал пользовательский объект (SparseArray‹Customer›) - person Long Ranger; 11.08.2016

Это очень простой способ настроить счетчик с массивом строк из файла array.xml вашего ресурса.

<Spinner
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:entries="@array/spinner_array_items"/>

spinner_array_items должен содержать список элементов, которые можно найти в раскрывающемся списке счетчика.

person clementiano    schedule 02.09.2016

Измените SparseArray<String> на SparseArray&lt;String&gt;.

person Hafez Divandari    schedule 21.08.2018

Ну, моя логика реализации основана на вашей, но использовала ArrayList вместо SparseArray.

XML:

    <data>
        <import type="java.util.ArrayList" />
        <variable
            name="cities"
            type="ArrayList&lt;String>"
        />        
    </data>

    <!-- Location -->
    <Spinner
        android:id="@+id/dd_city"
        android:entries="@{cities}"
        style="@style/dropdown"
    />

Теперь нам просто нужно связать нашу переменную ArrayList с cities через Binding Class.

По крайней мере, данные будут привязаны :).

TC.

person ForWebTech    schedule 05.02.2019