fun launchNextScreen(context: Context, people: People): Intent {
val intent = Intent(context, NextScreenActivity::class.Java)
intent.putExtra(EXTRA_PEOPLE, (Parcelable) people)
//intent.putExtra(EXTRA_PEOPLE, people as Parcelable)
//intent.putExtra(EXTRA_PEOPLE, people)
// tried above all three ways
return intent
}
Essayé le code ci-dessus pour transmettre aux personnes l'objet de type Personnes via l'intention en utilisant kotlin, mais en obtenant une erreur . S'il vous plaît, aidez-les à résoudre ce problème pour moi.
Tout d’abord, assurez-vous d’implémenter Serializable
dans la classe People
- s:
class People : Serializable {
//your stuff
}
Assurez-vous que vos champs internes de la classe People
implémentent également l'interface Serializable
. Sinon, vous obtiendrez une erreur d'exécution.
Alors ça devrait marcher:
fun launchNextScreen(context: Context, people: People): Intent {
val intent = Intent(context, NextScreenActivity::class.Java)
intent.putExtra(EXTRA_PEOPLE, people)
return intent
}
Pour recevoir les personnes renvoyées par Intent, vous devez appeler:
val people = getIntent().getExtras().getSerializableExtra(EXTRA_PEOPLE) as? People
Implémentez Serializable dans l'objet:
data class Object (
var param1: Int? = null,
var param2: String? = null
) : Serializable
ou
class Object : Serializable {
var param1: Int? = null,
var param2: String? = null
}
Ensuite, vous pouvez transmettre l'objet à l'aide de l'intention:
val object = Object()
...
val intent = Intent(this, Activity2::class.Java)
intent.putExtra("extra_object", object as Serializable)
startActivity(intent)
Enfin, dans Activity2, vous obtenez l'objet avec:
val object = intent.extras.get("extra_object") as Object
Trouver un meilleur moyen de le faire:
Dans ton grade:
apply plugin: 'org.jetbrains.kotlin.Android.extensions'
Android {
androidExtensions {
experimental = true
}
}
Dans votre classe de données:
@Parcelize
data class Student(val id: String, val name: String, val grade: String) : Parcelable
En activité source:
val intent = Intent(context, Destination::class.Java)
intent.putExtra("student_id", student)
context.startActivity(intent)
En activité de destination:
student = intent.getParcelableExtra("student_id")
Ce message pourrait être utile pour ce que vous avez l’intention de faire:
Existe-t-il un moyen pratique de créer des classes de données Parcelable dans Android avec Kotlin?
En gros, Kotlin fournit quelques petits extras:
@Parcelize
class User(val firstName: String, val lastName: String) : Parcelable
Voir le post pour plus d'informations.
J'ai trouvé un meilleur moyen de passer objet d'une activité à une autre à l'aide de Parcelable, il est plus rapide que la sérialisation Android: Différence entre Parcelable et Serializable?
commencez par ajouter ces lignes de code dans build.gradle (app)
Android{
androidExtensions {
experimental = true
}
}
je reçois la réponse de ici
@Parcelize
class Model(val title: String, val amount: Int) : Parcelable
passe avec intention --->
val intent = Intent(this, DetailActivity::class.Java)
intent.putExtra(DetailActivity.EXTRA, model)
startActivity(intent)
Obtenir de l'intention --->
val model: Model = intent.getParcelableExtra(EXTRA)
Votre classe People doit implémenter Parcelable comme ceci:
class People(): Parcelable{
// stuff
}
Le studio Android va vous montrer une erreur. Simple, déplacez votre curseur sur "Personnes" et appuyez sur alt + entrée. Il devrait maintenant afficher l'option permettant de générer une implémentation Parcelable.
Ce code généré contiendra quelque chose comme
parcel.writeString(member1)
parcel.writeInt(member2)
et ailleurs
member1=parcel.readString()
member2=parcel.readInt()
Assurez-vous que tous les membres sont contenus dans ces méthodes et lors de la modification, assurez-vous que les opérations de lecture et d'écriture se déroulent exactement dans le même ordre.