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.
2
  • Have you enable databinding in build.gradle? Commented Aug 9, 2016 at 3:13
  • Yes, I enable databinding in build.gradle. Here is the information of my Android Studio (Version: 2.1.2, JavaVersion : 1.7) Commented Aug 9, 2016 at 3:17

4 Answers 4

0

have you import the SparseArray ?

try this :

<data><import type="android.util.SparseArray"/></data>
Sign up to request clarification or add additional context in comments.

7 Comments

I forgot to add this statement in the question. I tried this but it doesn't work
SparseArray<String> change to SparseArray&lt;String> , try again
Tried this way and it still not work. "Cannot resolve symbol" error is still shown
< is a reserved character in xml. Can you omit the type of the SparseArray. Not like it exists in the compiled code anyway.
What I meant is instead of SparseArray<String> write just SparseArray in the type field.
|
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.

Comments

0

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

Comments

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.