Android
初心者

Intentでenumを渡したい、取得したい

More than 1 year has passed since last update.

intentを用いてenumを渡したり、その値を取得する方法を紹介します

まず、enumってよくわかってないんだけど…

ざっくり言うと定数を簡単に扱う方法です

enum Hogemon{
    ZENIHOGE,HITOKAGE,FUSHIGIHOGE
}

Hogemon.ZENIHOGEと呼び出せます。
ZENIHOGEはStringとかではなくZENIHOGEという定数になります。
定数をstatic final int HOGEMON_ZENIHOGE = 1みたいな感じに定義するよりもいろいろなメリットがあるそうです(詳しくは調べてください…)

Intentで渡す方法

他の値と同じようにintentにつめられます。

intentにつめる
intent.putExtra("hogemon",Hogemon.FUSHIGIHOGE);

Intentから取得する

enumを取得するにはObjectを取り出す時と同じようにgetSerializableExtra()を使用します

intentから取得
Hogemon foo = (Hogemon)getIntent().getSerializableExtra("hogemon");

getSerializableExtra()ってなんだ…

intを取得するときはgetIntExtra()とわかるけどSerializableって何?
なんでObjectはgetSerializableExtra()で取得できるの?

【Java】Serializableの基本(シリアライズ・直列化) - TASK NOTES

通常、オブジェクトはそのままストリームに書き出して読み込むことが出来ないので、読み書きできる形にデータを整形する事をシリアライズ(直列化)と呼んでいるようです。 オブジェクトをシリアライズ可能にするには java.io.Serializable インタフェースを実装する必要があります。

Objectはprimitive型と比べて複雑なので受け渡しのために変形できるようにする(Serializable)ということですね
なのでObjectを取得するときにはgetSerializableExtra()を使います(ObjectがSerializableインタフェースを実装していること)
そしてenumもSerializableインタフェースを実装しているからこのようにして取得できるわけです(参考:enum定数とシリアライズ:柴田 芳樹 (Yoshiki Shibata):So-netブログ