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"