如何将Enum对象添加到Android Bundle中?
当前回答
我认为将enum转换为int(对于普通enum),然后设置在bundle上是最简单的方法。就像下面的代码:
myIntent.PutExtra("Side", (int)PageType.Fornt);
然后检查状态:
int type = Intent.GetIntExtra("Side",-1);
if(type == (int)PageType.Fornt)
{
//To Do
}
但并不适用于所有枚举类型!
其他回答
枚举是可序列化的,所以没有问题。
给定以下enum:
enum YourEnum {
TYPE1,
TYPE2
}
包:
// put
bundle.putSerializable("key", YourEnum.TYPE1);
// get
YourEnum yourenum = (YourEnum) bundle.get("key");
目的:
// put
intent.putExtra("key", yourEnum);
// get
yourEnum = (YourEnum) intent.getSerializableExtra("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?防止任何空异常。
enum YourEnum { 类型1, 类型2 }
传递bundle as bundleOf("TYPE" to youenum . type1)
收到, 参数?。let {it.getSerializable(B"TYPE") as YourEnum}
最好从myEnumValue.name()中将其作为字符串传递,并从yourenum . valueof (s)中恢复,否则必须保留枚举的顺序!
更详细的解释:从枚举序数转换为枚举类型
我用高棉。
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))
推荐文章
- 警告:API ' variable . getjavacompile()'已过时,已被' variable . getjavacompileprovider()'取代
- 安装APK时出现错误
- 碎片中的onCreateOptionsMenu
- TextView粗体通过XML文件?
- 如何使线性布局的孩子之间的空间?
- 我可以在Java中设置enum起始值吗?
- DSL元素android.dataBinding。enabled'已过时,已被'android.buildFeatures.dataBinding'取代
- ConstraintLayout:以编程方式更改约束
- PANIC: AVD系统路径损坏。检查ANDROID_SDK_ROOT值
- 如何生成字符串类型的buildConfigField
- Recyclerview不调用onCreateViewHolder
- Android API 21工具栏填充
- Android L中不支持操作栏导航模式
- 如何在TextView中添加一个子弹符号?
- c# vs Java Enum(适合c#新手)