2011-08-24 9 views
14

アンドロイドのスピンウィジェット内のリストにenumを使用したいと考えています。次のように私は私の列挙型を設定している:これはほとんどの作品AndroidのSpinnerの配列アダプタに列挙型を追加する

mAddressState.setAdapter(new ArrayAdapter<States>(this, android.R.layout.simple_list_item_1, States.values())); 

が、私のスピナーリストに私がではなく、略語で終わる:次のように

public enum States{ 

AL("Alabama"), 
AK("Alaska"), 
AR("Arkansas"), 
AZ("Arizona"), 
CA("California"), 
CO("Colorado"), 
    ... (etc.) 
} 

は私の現在のアレイアダプタが設定され状態の名前(これは私が行っているものです)。この設定を正しく行うための回避策はありますか?

答えて

33

私はこれが誰かを助けることを願っています。それは私のためにそれを把握するために私の時間がかかりました。トリックはあなたのenumでtoStringをオーバーライドすることです。あなたの状態の列挙型のコードは次のようになります。

mAddressState.setAdapter(new ArrayAdapter<States>(this, 
     android.R.layout.simple_list_item_1, States.values())); 

をし、長い名前はスピナーに表示されます:

public enum States{ 
    AL("Alabama"), 
    AK("Alaska"), 
    AR("Arkansas"), 
    AZ("Arizona"), 
    CA("California"), 
    CO("Colorado"), 
    ... (etc.); 

    private String theState; 

    States(String aState) { 
    theState = aState; 
    } 

    @Override public String toString() { 
    return theState; 
    } 
} 

はその後、あなたが同じようにアダプタを作成します。アダプタから省略名を取得するには、たとえば選択した名前を格納するには、enum.name()関数を使用します。たとえば:

Spinner spinner = (Spinner) myView.findViewById(R.id.theState); 
String selected = ((States)spinner.getSelectedItem()).name(); 
0

public enum States{ 

    AL("Alabama"), 
    AK("Alaska"), 
    ... (etc.) 

    private String fullName; 

    States(String fullName) { 
     this.fullName = fullName; 
    } 

    public String fullName() { return fullName; } 
} 
+0

これは機能しませんでした。私はそれを実際にやっていて、指定しなかった、申し訳ありません。アレイアダプターは私にそれをやろうとしていないようです。 mAddressState.setAdapter(新しいArrayAdapter (this、android.R.layout.simple_list_item_1、States.getStateName())); アレイアダプタータイプを に設定してみました。 new ArrayAdapter まだ私が行ったことはありませんでした。その他のアドバイスは? – RyanInBinary

0

多分あなたはここにhere示すように、のtoString()関数をオーバーライドしてみてください)、その後States.fullName(とStates.valuesを()を交換...そのような列挙型のコンストラクタを追加します。私はまだそれを試していないが、私はまさにしようとしていた。

関連する問題