如何将Enum对象添加到Android Bundle中?


当前回答

这对我来说很容易:

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}

对于Intent,你可以这样使用:

意图:kotlin

FirstActivity:

val intent = Intent(context, SecondActivity::class.java)
intent.putExtra("type", typeEnum.A)
startActivity(intent)

SecondActivity:

override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState) 
     //...
     val type = (intent.extras?.get("type") as? typeEnum.Type?)
}

为了完整起见,这是一个完整的示例,说明如何从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");

我用高棉。

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))

使用包。putSerializable(String key, Serializable s)和bundle。getSerializable (String键):

enum Mode = {
  BASIC, ADVANCED
}

Mode m = Mode.BASIC;

bundle.putSerializable("mode", m);

...

Mode m;
m = bundle.getSerializable("mode");

文档:http://developer.android.com/reference/android/os/Bundle.html