2012-05-01 22 views
0

我在android中有一個微調框的問題,我不能將枚舉值設置爲其內容。下面是微調的代碼:把枚舉從xml放到微調框中

<Spinner 
    android:id="@+id/spTrainingType" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:entries="@attr/TrainingType" 
    android:prompt="@string/hint_training_type" /> 

這裏是枚舉:

<declare-styleable name="TrainingStyle"> 
    <attr name="RecallType"> 
     <enum name="Vibro" value="1" /> 
     <enum name="Music" value="2" /> 
     <enum name="Silent" value="3" /> 
     <enum name="Alarm" value="4" /> 
    </attr> 
    <attr name="RepeatType"> 
     <enum name="Daily" value="1" /> 
     <enum name="Weekly" value="2" /> 
     <enum name="Monthly" value="3" /> 
    </attr> 
    <attr name="TrainingType"> 
     <enum name="Jogging" value="1" /> 
     <enum name="Cross" value="2" /> 
     <enum name="Climbing" value="3" /> 
     <enum name="BikeTrip" value="4" /> 
    </attr> 
</declare-styleable> 

那麼,有沒有辦法把枚舉到微調,或者只列?或者可能是我做錯了。 在此先感謝。

回答

2

據我所知,你現在想要做的是不可能的。 attr命名空間是爲了容納View(Group) s/Widget等的「屬性」,而不是值 - 因此是縮寫。如果你想了一會兒,如果支持它,可能會有類似於Resources類中的getEnumeration()方法,或者可能是用於將值映射到......井中的更通用的版本,Map

使鍵/值對與Spinner一起工作的標準方法是在res/values/arrays.xml中爲鍵和值定義單獨的數組。這樣的數組中的項目按順序加載,因此您可以使用基於索引的查找來將鍵與值進行匹配(反之亦然)。

另一種方法,我相信你會發現,如果你搜索一下,你會發現這個方法是將鍵和值合併成一個單獨的字符串;例如通過使用特殊的分隔字符,但這可能意味着您需要在將其顯示給用戶之前對其進行預處理。這不是最靈活的解決方案,絕對不是我喜歡的。

這就是說,實現您自己的XmlPullParser來加載資源/ xml文件中的鍵/值對並不難。如果您按照該類文檔的鏈接,實際上您會發現免費提供的非常基本的實現。 :)

1

以編程方式它是可能的。我不認爲通過XML中的枚舉是可能的。它不起作用,只有XML中的String數組才起作用。在Java代碼的編程

實施例:

佈局::

<TextView android:text="@string/type_prompt"/> 
<Spinner android:id="@+id/type" android:prompt="@string/type_prompt"/> 

值:

<string-array name="type_array"> 
    <item>Default</item> 
    <item>Currency</item> 
    <item>Experience</item> 
</string-array> 
經由XML字符串數組

public Enum ValueType { 
     DefaultType, NotSoDefaultType, AnotherType 
} 


Spinner viewTypeSpinner = (Spinner) findViewById(R.id.viewTypeSpinner); 

ArrayAdapter viewarrayadapter = new ArrayAdapter<ConsignmentStatus>(this, 
       android.R.layout.simple_spinner_item, 
       ValueType.values()); 
     viewTypeSpinner.setAdapter(viewarrayadapter); 

       viewarrayadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

實施例