intentを用いてenumを渡したり、その値を取得する方法を紹介します
まず、enumってよくわかってないんだけど…
ざっくり言うと定数を簡単に扱う方法です
enum Hogemon{
ZENIHOGE,HITOKAGE,FUSHIGIHOGE
}
Hogemon.ZENIHOGE
と呼び出せます。
ZENIHOGEはStringとかではなくZENIHOGEという定数になります。
定数をstatic final int HOGEMON_ZENIHOGE = 1
みたいな感じに定義するよりもいろいろなメリットがあるそうです(詳しくは調べてください…)
Intentで渡す方法
他の値と同じようにintentにつめられます。
intent.putExtra("hogemon",Hogemon.FUSHIGIHOGE);
Intentから取得する
enumを取得するにはObjectを取り出す時と同じようにgetSerializableExtra()
を使用します
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ブログ)