如何将Enum对象添加到Android Bundle中?
当前回答
最好从myEnumValue.name()中将其作为字符串传递,并从yourenum . valueof (s)中恢复,否则必须保留枚举的顺序!
更详细的解释:从枚举序数转换为枚举类型
其他回答
我认为将enum转换为int(对于普通enum),然后设置在bundle上是最简单的方法。就像下面的代码:
myIntent.PutExtra("Side", (int)PageType.Fornt);
然后检查状态:
int type = Intent.GetIntExtra("Side",-1);
if(type == (int)PageType.Fornt)
{
//To Do
}
但并不适用于所有枚举类型!
我创建了一个Koltin扩展:
fun Bundle.putEnum(key: String, enum: Enum<*>) {
this.putString( key , enum.name )
}
inline fun <reified T: Enum<T>> Intent.getEnumExtra(key:String) : T {
return enumValueOf( getStringExtra(key) )
}
创建一个bundle并添加:
Bundle().also {
it.putEnum( "KEY" , ENUM_CLAS.ITEM )
}
并获得:
intent?.getEnumExtra< ENUM_CLAS >( "KEY" )?.let{}
为了完整起见,这是一个完整的示例,说明如何从bundle中放入和返回enum。
给定以下enum:
enum EnumType{
ENUM_VALUE_1,
ENUM_VALUE_2
}
你可以把枚举放到一个bundle中:
bundle.putSerializable("enum_key", EnumType.ENUM_VALUE_1);
并返回enum:
EnumType enumType = (EnumType)bundle.getSerializable("enum_key");
这对我来说很容易:
enum class MyEnum {
FOO,
BAR
}
val bundle = Bundle()
bundle.putAll(bundleOf("myKey", MyEnum.FOO))
// to read
val myEnum = bundle.get("myKey") as MyEnumClass
注意,如果你从onCreate得到这个,你会想使用as?防止任何空异常。
我用高棉。
companion object {
enum class Mode {
MODE_REFERENCE,
MODE_DOWNLOAD
}
}
然后放入Intent:
intent.putExtra(KEY_MODE, Mode.MODE_DOWNLOAD.name)
当你上网获得价值时:
mode = Mode.valueOf(intent.getStringExtra(KEY_MODE))
推荐文章
- Manifest合并失败:uses-sdk:minSdkVersion 14
- 为什么Android工作室说“等待调试器”如果我不调试?
- 如何检查我的EditText字段是否为空?
- Android从图库中选择图像
- 后台任务,进度对话框,方向改变-有任何100%工作的解决方案吗?
- Android:垂直对齐多行EditText(文本区域)
- Android无尽列表
- Android room persistent: AppDatabase_Impl不存在
- 错误:执行失败的任务':app:compileDebugKotlin'。>编译错误。详细信息请参见日志
- 在Android中使用URI生成器或使用变量创建URL
- 缩放图像以填充ImageView宽度并保持纵横比
- 列表视图的自定义适配器
- 在Android中设置TextView span的颜色
- 如何以编程方式在RelativeLayout中布局视图?
- Android Facebook集成无效键散列