Cannot set string array for spinner using Android

2019-07-31 16:55发布

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.

4条回答
Deceive 欺骗
2楼-- · 2019-07-31 17:07

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.

查看更多
趁早两清
3楼-- · 2019-07-31 17:13

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.

查看更多
Melony?
4楼-- · 2019-07-31 17:20

have you import the SparseArray ?

try this :

<data><import type="android.util.SparseArray"/></data>
查看更多
贼婆χ
5楼-- · 2019-07-31 17:26

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

查看更多
登录 后发表回答