Skip to content Skip to sidebar Skip to footer

Passing An Object Instance Between Two Activities In Kotlin

I'm wondering if someone could help me to fix this error with Intent? I have 2 activities to connect between the: The first activity for Grid View 'MainActivity.kt', second for L

Solution 1:

Create an IntDef like:

@Retention(SOURCE)@IntDef({ADAPTER_MODE_1, ADAPTER_MODE_2, ADAPTER_MODE_3})public@interface AdapterMode {}
publicstaticfinalintADAPTER_MODE_1=0;
publicstaticfinalintADAPTER_MODE_2=1;
publicstaticfinalintADAPTER_MODE_3=2;
//...

and add the int to the bundle. For Kotlin you have to use a companion object to define the variables like

classFirstActivity{
    companionobject { 
         val ADAPTER_MODE1 = 0val ADAPTER_MODE2 = 1val ADAPTER_MODE3 = 2//...
    }
}

So you can pass unlimited adapter cases to your 2nd activity

EDIT: Kotlin doesn't support @IntDef so you should use an enum for that:

enumclassAdapterType{
    ADAPTER_TYPE_1,
    ADAPTER_TYPE_2,
    ADAPTER_TYPE_3;

    companionobject {
        funfromOrdinal(ordinal: Int): AdapterType? {
            return AdapterType.values().firstOrNull { it.ordinal == ordinal }
        }
    }
}

Then use it like:

classFirstActivity : AppCompatActivity() {

    overridefunonCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val intent = Intent(this, SecondActivity::class.java)
        intent.putExtra(SecondActivity.EXTRA_ADAPTER_MODE, AdapterType.ADAPTER_TYPE_2.ordinal)
    }
}

And retrieve it like:

classSecondActivity : AppCompatActivity() {
    companionobject {
        val EXTRA_ADAPTER_MODE = "extra_adapter_mode"
    }

    overridefunonCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //...val adapterTypeOrdinal = intent?.getIntExtra(EXTRA_ADAPTER_MODE, AdapterType.ADAPTER_TYPE_1.ordinal)
        val adapterType = adapterTypeOrdinal?.let { AdapterType.fromOrdinal(it) }

        // do something with it
    }
}

Solution 2:

You can not pass Adapters between Activities. At least in a clean way, recommended by Google. Adapters implement neither Parcelable nor Serializable interface. So general rule, as Nino Handler pointed out - use Intent to send data (not Adapters itself) which should be used to create Adapter.

Post a Comment for "Passing An Object Instance Between Two Activities In Kotlin"