2

I have a spinner now and I want to load the data to the spinner with data binding feature. I tried to find the way to declare the string array in the XML(https://developer.android.com/topic/libraries/data-binding/index.html#expression_language) but no satisfied result is found.

<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>

When it is build, the following error is shown.

Error:Execution failed for task ':app:dataBindingProcessLayoutsDebug'.

org.xml.sax.SAXParseException; systemId: file:/C:/Users/../app/build/intermediates/res/merged/debug/layout/testdialog.xml; lineNumber: 24; columnNumber: 30; The value of attribute "type" associated with an element type "null" must not contain the '<' character.

However, there is something confused.

  1. When I tried to use SparseArray as shown on website. I found a "Cannot resolve sysmbol" in Android Studio XML Editor.
  2. I do not know is it the correct way to setup the array value for the spinner since there is no official instructions for the spinner data bindingin the website.
Long Ranger
  • 5,888
  • 8
  • 43
  • 72

4 Answers4

0

have you import the SparseArray ?

try this :

<data><import type="android.util.SparseArray"/></data>
FrankOy
  • 31
  • 2
  • I forgot to add this statement in the question. I tried this but it doesn't work – Long Ranger Aug 09 '16 at 04:11
  • 2
    SparseArray change to SparseArray<String> , try again – FrankOy Aug 09 '16 at 04:41
  • Tried this way and it still not work. "Cannot resolve symbol" error is still shown – Long Ranger Aug 09 '16 at 06:50
  • < is a reserved character in xml. Can you omit the type of the SparseArray. Not like it exists in the compiled code anyway. – GPuschka Aug 09 '16 at 07:09
  • What I meant is instead of SparseArray write just SparseArray in the type field. – GPuschka Aug 09 '16 at 07:17
  • That's kind of weird , I remember when my Android Studio is V1.5 , it works, but now have the same problem , Android Studio is V2.1 , is that a bug or something ? I wonder – FrankOy Aug 09 '16 at 07:35
  • @GPuschka, if I use the SparseArray without type , doesn't it mean this variable is not type safety? That would not be solved if I use the custom object (SparseArray) – Long Ranger Aug 11 '16 at 02:20
0

This is a very simple way to setup a spinner with a string-array from your resource's array.xml

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

The spinner_array_items should contain a list of items to be found in the spinner dropdown.

clementiano
  • 139
  • 2
  • 10
0

Change SparseArray<String> to SparseArray&lt;String&gt;.

Hafez Divandari
  • 8,381
  • 4
  • 46
  • 63
-1

Well my implementation logic is based on your's but used ArrayList instead 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"
    />

Now, we just need to bind our ArrayList to cities variable through Binding Class.

At least data will be bind : ).

TC.

ForWebTech
  • 140
  • 1
  • 13