404 Stimmen

Android: Wie füge ich eine Enum in ein Bundle ein?

Wie fügt man ein Enum-Objekt zu einem Android-Bundle hinzu?

835voto

miguel Punkte 15066

Enums sind serialisierbar, daher gibt es kein Problem.

Gegeben ist die folgende Aufzählung:

enum YourEnum {
  TYPE1,
  TYPE2
}

Bündel:

// put
bundle.putSerializable("key", YourEnum.TYPE1);

// get 
YourEnum yourenum = (YourEnum) bundle.get("key");

Absicht:

// put
intent.putExtra("key", yourEnum);

// get
yourEnum = (YourEnum) intent.getSerializableExtra("key");

173voto

Alejandro Colorado Punkte 5934

Ich weiß, dies ist eine alte Frage, aber ich hatte das gleiche Problem und möchte Ihnen mitteilen, wie ich es gelöst habe. Der Schlüssel ist, was Miguel sagte: Enums sind serialisierbar.

Gegeben ist die folgende Aufzählung:

enum YourEnumType {
    ENUM_KEY_1, 
    ENUM_KEY_2
}

Setzen:

Bundle args = new Bundle();
args.putSerializable("arg", YourEnumType.ENUM_KEY_1);

50voto

TheIT Punkte 11363

Der Vollständigkeit halber ist dies ein vollständiges Beispiel dafür, wie man eine Aufzählung in ein Bundle einträgt und von diesem zurückerhält.

Gegeben ist die folgende Aufzählung:

enum EnumType{
    ENUM_VALUE_1,
    ENUM_VALUE_2
}

Sie können die Aufzählung in ein Bündel packen:

bundle.putSerializable("enum_key", EnumType.ENUM_VALUE_1);

Und erhalten Sie die Aufzählung zurück:

EnumType enumType = (EnumType)bundle.getSerializable("enum_key");

35voto

Vladislav Punkte 1106

Ich verwende kotlin.

companion object {

        enum class Mode {
            MODE_REFERENCE,
            MODE_DOWNLOAD
        }
}

dann in Intent setzen:

intent.putExtra(KEY_MODE, Mode.MODE_DOWNLOAD.name)

wenn Sie netto einen Wert erhalten:

mode = Mode.valueOf(intent.getStringExtra(KEY_MODE))

17voto

user602359 Punkte 171

Es kann besser sein, sie als String von myEnumValue.name() zu übergeben und sie von YourEnums.valueOf(s) wiederherzustellen, da sonst die Reihenfolge der Enum beibehalten werden muss!

Längere Erklärung: Umwandlung von enum ordinal in enum type

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X