3

Web サービスで動作する Android アプリケーションを開発しています。

説明のアルファベット順に並べ替えたいEnum.values()

私はこれを持っていますEnum

public enum Stature
{
    tall (0, MSDApplication.getAppContext().getString(R.string.stature_tall)),
    average(1, MSDApplication.getAppContext().getString(R.string.stature_average)),
    small(2, MSDApplication.getAppContext().getString(R.string.stature_small));

    private final int stature;
    private final String statureString;

    Stature(int anStature, String anStatureString) { stature = anStature; statureString = anStatureString; }

    public int getValue() { return stature; }

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

たぶん、これは を使用するための最良の選択ではありませんEnumが、私は Java 開発に関して非常に新しいです。

そのを使用してアルファベット順に並べ替える方法を知っていますstatureStringか?

Enum.values()これらを次で使用したいので、これを行いたいですArrayAdapter

mSpinStature.setAdapter(new ArrayAdapter<Stature>(mActivity, android.R.layout.simple_dropdown_item_1line, Stature.values()));

Statureそして、ここで選択したアイテムを取得したい:

private OnItemSelectedListener listener = new OnItemSelectedListener()
{

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos,
            long aid)
    {
        if (parent.equals(mSpinStature))
        {
            Stature item = (Stature)parent.getAdapter().getItem(pos);
            Log.v("TAG", item.toString() + item.getValue());
        }
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0)
    {
    }

};
4

2 に答える 2

8

列挙型にメソッドを追加するのはどうですか

enum Stature {
    tall, average, small;

    public static Stature[] getSortedVaules() {
        Stature[] statures = values();
        Arrays.sort(statures, EnumByNameComparator.INSTANCE);
        return statures;
    }

    private static class EnumByNameComparator implements Comparator<Enum<?>> {

        public static final Comparator<Enum<?>> INSTANCE = new EnumByNameComparator();

        public int compare(Enum<?> enum1, Enum<?> enum2) {
            return enum1.name().compareTo(enum2.name());
        }

    }

}

public class StatureTest {

    @Test
    public void getSortedValues() {
        Stature[] normalValues = Stature.values();
        Assert.assertEquals(Stature.tall, normalValues[0]);
        Assert.assertEquals(Stature.average, normalValues[1]);
        Assert.assertEquals(Stature.small, normalValues[2]);

        Stature[] sortedVaules = Stature.getSortedVaules();
        Assert.assertEquals(Stature.average, sortedVaules[0]);
        Assert.assertEquals(Stature.small, sortedVaules[1]);
        Assert.assertEquals(Stature.tall, sortedVaules[2]);
    }
}
于 2013-06-21T07:58:18.887 に答える
1

列挙型は、宣言の優先度によってソートされます。したがって、最も簡単な方法は、それらを目的の順序で宣言することです。

比較メソッドを実装する Comparator インターフェイスを使用することもできます。

于 2013-06-21T07:59:41.500 に答える