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
}
Kotlinを使用してインテントを介してPeopleタイプのPeopleオブジェクトを渡すために上記のコードを試しましたが、エラーが発生しました。これを解決してください。
まず、Serializable
- sクラスにPeople
を実装していることを確認します。
class People : Serializable {
//your stuff
}
People
クラスの内部フィールドもSerializable
インターフェイスを実装していることを確認してください。そうでない場合は、ランタイムエラーが発生します。
その後、動作するはずです:
fun launchNextScreen(context: Context, people: People): Intent {
val intent = Intent(context, NextScreenActivity::class.Java)
intent.putExtra(EXTRA_PEOPLE, people)
return intent
}
Intentからの返信を受け取るには、以下を呼び出す必要があります。
val people = getIntent().getExtras().getSerializableExtra(EXTRA_PEOPLE) as? People
オブジェクトにSerializableを実装します。
data class Object (
var param1: Int? = null,
var param2: String? = null
) : Serializable
または
class Object : Serializable {
var param1: Int? = null,
var param2: String? = null
}
次に、Intentを使用してオブジェクトを渡すことができます。
val object = Object()
...
val intent = Intent(this, Activity2::class.Java)
intent.putExtra("extra_object", object as Serializable)
startActivity(intent)
最後に、Activity2でオブジェクトを取得します:
val object = intent.extras.get("extra_object") as Object
これを行うより良い方法を見つけました:
あなたのgradleで:
apply plugin: 'org.jetbrains.kotlin.Android.extensions'
Android {
androidExtensions {
experimental = true
}
}
データクラスで:
@Parcelize
data class Student(val id: String, val name: String, val grade: String) : Parcelable
ソースアクティビティ:
val intent = Intent(context, Destination::class.Java)
intent.putExtra("student_id", student)
context.startActivity(intent)
宛先アクティビティ:
student = intent.getParcelableExtra("student_id")
この投稿は、あなたが何をしようとしているかに役立つかもしれません:
KotlinでAndroidにParcelableデータクラスを作成する便利な方法はありますか?
基本的に、kotlinはいくつかの小さな追加機能を提供します。
@Parcelize
class User(val firstName: String, val lastName: String) : Parcelable
詳細については、投稿を参照してください。
Parcelableを使用して1つのアクティビティを別のアクティビティに渡すより良い方法を見つけました。シリアル化よりも高速です Android:ParcelableとSerializableの違い?
最初にbuild.gradle(app)内にこのコード行を追加します
Android{
androidExtensions {
experimental = true
}
}
here から回答を得ています
@Parcelize
class Model(val title: String, val amount: Int) : Parcelable
インテントで渡す--->
val intent = Intent(this, DetailActivity::class.Java)
intent.putExtra(DetailActivity.EXTRA, model)
startActivity(intent)
インテントから取得--->
val model: Model = intent.getParcelableExtra(EXTRA)
kotlinでアクティビティを開始してデータを渡すには、次のようなものを試してみてください。
startActivity(intentFor<NameOfActivity>(STRING to data))
楽しい
Peopleクラスは、次のようにParcelableを実装する必要があります。
class People(): Parcelable{
// stuff
}
Androidスタジオにエラーが表示されます。カーソルを「People」に移動し、Alt + Enterキーを押します。これで、Parcelable実装を生成するオプションが表示されます。
この生成されたコードには次のようなものが含まれます
parcel.writeString(member1)
parcel.writeInt(member2)
そしてどこか他の
member1=parcel.readString()
member2=parcel.readInt()
すべてのメンバーがこれらのメソッドに含まれていることを確認し、それを変更するときは、読み取りと書き込みがまったく同じ順序で行われていることを確認してください。