10

Enum.toString()Android アプリケーションを開発していますが、多言語を設定できるかどうかを知りたいです。

これをで使用Enumし、Spinner多言語テキストを使用したいと考えています。

public class Types
{
    public enum Stature
    {
        tall (0, "tall"),
        average(1, "average"),
        small(2, "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 内での使用方法がわかりませんContext.getString()。テストのために「tall」、「average」、「small」をハードコーディングしました。enumヘルパークラスの内部でそれを定義しました。

これは私が をどのように使用するかenumですSpinner:

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

どうすればできるか知っていますか?

4

4 に答える 4

6

大きなプロジェクト ( Xdroid )の一部である単純なライブラリを作成しました。

compile 'com.shamanland:xdroid-enum-format:0.2.4'

注釈を使用することで、すべての列挙に対して同じモンキー ジョブ (フィールド、コンストラクターなどの宣言) を回避できるようになりました。

public enum State {
    @EnumString(R.string.state_idle)
    IDLE,

    @EnumString(R.string.state_pending)
    PENDING,

    @EnumString(R.string.state_in_progress)
    IN_PROGRESS,

    @EnumString(R.string.state_cancelled)
    CANCELLED,

    @EnumString(R.string.state_done)
    DONE;
}

次に、一般的な Java アプローチを使用します - クラスの拡張機能を使用しますjava.text.Format

public void onStateChanged(State state) {
    EnumFormat enumFormat = EnumFormat.getInstance();
    toast(enumFormat.format(state));
}

文字列.xml

<string name="state_idle">Idle</string>
<string name="state_pending">Pending</string>
<string name="state_in_progress">In progress</string>
<string name="state_cancelled">Cancelled</string>
<string name="state_done">Done</string>

簡単な表示方法はこちらをご覧ください。Toast

githubからデモ アプリをコンパイルすることもできます。

于 2015-04-14T10:50:19.190 に答える