android सरक एंड्रॉइड: बंडल में एनम कैसे डालें?




बीएससी नर्सिंग के बाद क्या करे (9)

एक आसान तरीका, enum के लिए पूर्णांक मूल्य असाइन करें

निम्नलिखित उदाहरण देखें:

public enum MyEnum {

    TYPE_ONE(1), TYPE_TWO(2), TYPE_THREE(3);

    private int value;

    MyEnum(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

}

प्रेषक साइड:

Intent nextIntent = new Intent(CurrentActivity.this, NextActivity.class);
nextIntent.putExtra("key_type", MyEnum.TYPE_ONE.getValue());
startActivity(nextIntent);

रिसीवर साइड:

Bundle mExtras = getIntent().getExtras();
int mType = 0;
if (mExtras != null) {
    mType = mExtras.getInt("key_type", 0);
}

/* OR
    Intent mIntent = getIntent();
    int mType = mIntent.getIntExtra("key_type", 0);
*/

if(mType == MyEnum.TYPE_ONE.getValue())
    Toast.makeText(NextActivity.this, "TypeOne", Toast.LENGTH_SHORT).show();
else if(mType == MyEnum.TYPE_TWO.getValue())
    Toast.makeText(NextActivity.this, "TypeTwo", Toast.LENGTH_SHORT).show();
else if(mType == MyEnum.TYPE_THREE.getValue())
    Toast.makeText(NextActivity.this, "TypeThree", Toast.LENGTH_SHORT).show();
else
    Toast.makeText(NextActivity.this, "Wrong Key", Toast.LENGTH_SHORT).show();

आप एंड्रॉइड बंडल में एनम ऑब्जेक्ट कैसे जोड़ते हैं?


पूर्णता के लिए, यह एक पूर्ण उदाहरण है कि कैसे एक बंडल से एक enum वापस करने के लिए।

निम्नलिखित enum दिया गया:

enum EnumType{
    ENUM_VALUE_1,
    ENUM_VALUE_2
}

आप enum को एक बंडल में डाल सकते हैं:

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

और enum वापस प्राप्त करें:

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

मैं कोटलिन का उपयोग करता हूं।

companion object {

        private enum class Mode {
            MODE_REFERENCE,
            MODE_DOWNLOAD
        }
}

फिर इरादे में डाल दिया:

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

जब आप मूल्य प्राप्त करने के लिए नेट:

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

इसे myEnumValue.name () से स्ट्रिंग के रूप में पास करना बेहतर हो सकता है और इसे YourEnums.valueOf से पुनर्स्थापित कर सकता है, अन्यथा एनम के ऑर्डरिंग को संरक्षित किया जाना चाहिए!

लंबी व्याख्या: enum ordinal से enum प्रकार में कनवर्ट करें


Enums Serializable हैं इसलिए कोई मुद्दा नहीं है।

निम्नलिखित 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 को int (सामान्य enum के लिए) में कनवर्ट करें और फिर बंडल पर सेट किया गया सबसे आसान तरीका था। इरादे के लिए इस कोड की तरह:

myIntent.PutExtra("Side", (int)PageType.Fornt);

फिर चेक स्टेट के लिए:

int type = Intent.GetIntExtra("Side",-1);
if(type == (int)PageType.Fornt)
{
    //To Do
}

लेकिन सभी enum प्रकार के लिए काम नहीं करते!


एक बात के बारे में पता होना चाहिए - यदि आप एक Bundle लिए Bundle का उपयोग कर रहे हैं, तो अधिसूचना में जोड़ा जा सकता है, तो आप निम्न समस्या में भाग सकते हैं:

*** Uncaught remote exception!  (Exceptions are not yet supported across processes.)
    java.lang.RuntimeException: Parcelable encountered ClassNotFoundException reading a Serializable object.

...

इसके आस-पास पहुंचने के लिए, आप निम्न कार्य कर सकते हैं:

public enum MyEnum {
    TYPE_0(0),
    TYPE_1(1),
    TYPE_2(2);

    private final int code;

    private MyEnum(int code) {
        this.code = navigationOptionLabelResId;
    }

    public int getCode() {
        return code;
    }

    public static MyEnum fromCode(int code) {
        switch(code) {
            case 0:
                return TYPE_0;
            case 1:
                return TYPE_1;
            case 2:
                return TYPE_2;
            default:
                throw new RuntimeException(
                    "Illegal TYPE_0: " + code);
        }
    }
}

इसका उपयोग तब किया जा सकता है:

// Put
Bundle bundle = new Bundle();
bundle.putInt("key", MyEnum.TYPE_0.getCode());

// Get 
MyEnum myEnum = MyEnum.fromCode(bundle.getInt("key"));

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैं एक ही समस्या के साथ आया था और मैं साझा करना चाहता हूं कि मैंने इसे कैसे हल किया। मिगुएल ने कहा कि कुंजी यही है: Enums Serializable हैं।

निम्नलिखित enum दिया गया:

enum YourEnumType {
    ENUM_KEY_1, 
    ENUM_KEY_2
}

डाल:

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

बस इसे टर्मिनल () से int रूप में पास करें। इसे मानों से पुनर्स्थापित करें []।





android-bundle