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
}
Es wurde versucht, den obigen Code zum Übertragen von Personenobjekten des Typs Person mithilfe von Kotlin zu verwenden. Der Fehler wird jedoch angezeigt. Bitte helfen Sie, das Problem für mich zu lösen.
Stellen Sie zunächst sicher, dass Sie Serializable
in der Klasse People
_ implementieren:
class People : Serializable {
//your stuff
}
Stellen Sie sicher, dass Ihre inneren Felder der Klasse People
auch die Schnittstelle Serializable
implementieren. Andernfalls erhalten Sie einen Laufzeitfehler.
Dann sollte es funktionieren:
fun launchNextScreen(context: Context, people: People): Intent {
val intent = Intent(context, NextScreenActivity::class.Java)
intent.putExtra(EXTRA_PEOPLE, people)
return intent
}
Um Leute von Intent zu erhalten, müssen Sie anrufen:
val people = getIntent().getExtras().getSerializableExtra(EXTRA_PEOPLE) as? People
Implementiere Serializable im Objekt:
data class Object (
var param1: Int? = null,
var param2: String? = null
) : Serializable
oder
class Object : Serializable {
var param1: Int? = null,
var param2: String? = null
}
Dann können Sie das Objekt mit Intent übergeben:
val object = Object()
...
val intent = Intent(this, Activity2::class.Java)
intent.putExtra("extra_object", object as Serializable)
startActivity(intent)
Zum Schluss erhalten Sie in Activity2 das Objekt mit:
val object = intent.extras.get("extra_object") as Object
Einen besseren Weg gefunden, dies zu tun:
In deinem Schulabschluss:
apply plugin: 'org.jetbrains.kotlin.Android.extensions'
Android {
androidExtensions {
experimental = true
}
}
In Ihrer Datenklasse:
@Parcelize
data class Student(val id: String, val name: String, val grade: String) : Parcelable
In der Quellaktivität:
val intent = Intent(context, Destination::class.Java)
intent.putExtra("student_id", student)
context.startActivity(intent)
In der Zielaktivität:
student = intent.getParcelableExtra("student_id")
Dieser Beitrag kann nützlich sein für das, was Sie vorhaben:
Gibt es einen bequemen Weg, um mit Kotlin Parcelable-Datenklassen in Android zu erstellen?
Grundsätzlich bietet Kotlin einige kleine Extras:
@Parcelize
class User(val firstName: String, val lastName: String) : Parcelable
Siehe den Beitrag für weitere Informationen.
Ich habe eine bessere Methode gefunden, um eine Objektaktivität mithilfe von Parcelable an eine andere zu übergeben. Dies ist schneller als die Serialisierung Android: Unterschied zwischen Parcelable und Serializable?
fügen Sie zuerst diese Codezeilen in build.gradle (App) ein.
Android{
androidExtensions {
experimental = true
}
}
ich bekomme eine Antwort von hier
@Parcelize
class Model(val title: String, val amount: Int) : Parcelable
Bestehen mit Absicht --->
val intent = Intent(this, DetailActivity::class.Java)
intent.putExtra(DetailActivity.EXTRA, model)
startActivity(intent)
Aus Vorsatz --->
val model: Model = intent.getParcelableExtra(EXTRA)
in Kotlin können Sie Folgendes ausprobieren, um die Aktivität zu starten und einige Daten weiterzugeben:
startActivity(intentFor<NameOfActivity>(STRING to data))
Viel Spaß
Ihre People-Klasse muss Parcelable folgendermaßen implementieren:
class People(): Parcelable{
// stuff
}
Android Studio zeigt einen Fehler an. Bewegen Sie einfach den Cursor auf "People" und drücken Sie Alt + Enter. Jetzt sollte die Option zum Generieren einer Parcelable-Implementierung angezeigt werden.
Dieser generierte Code enthält etwas
parcel.writeString(member1)
parcel.writeInt(member2)
und woanders
member1=parcel.readString()
member2=parcel.readInt()
Stellen Sie sicher, dass alle Elemente in diesen Methoden enthalten sind, und stellen Sie beim Ändern sicher, dass Lese- und Schreibvorgänge in derselben Reihenfolge stattfinden.