Ank*_*mar 24 android android-intent kotlin kotlin-android-extensions
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
}
Run Code Online (Sandbox Code Playgroud)
试过上面的代码,通过使用kotlin通过intent传递People类型的对象,但是得到了错误.请帮我解决这个问题.
A. *_*huk 38
首先,确保Serializable在People-s类中实现:
class People : Serializable {
//your stuff
}
Run Code Online (Sandbox Code Playgroud)
确保你的内部字段People也实现Serializable接口,否则你将得到运行时错误.
然后它应该工作:
fun launchNextScreen(context: Context, people: People): Intent {
val intent = Intent(context, NextScreenActivity::class.java)
intent.putExtra(EXTRA_PEOPLE, people)
return intent
}
Run Code Online (Sandbox Code Playgroud)
要从Intent接收人员,您需要致电:
val people = intent.getSerializableExtra(EXTRA_PEOPLE) as? People
Run Code Online (Sandbox Code Playgroud)
Gib*_*olt 18
Parcelize不再是实验性的,从 Kotlin 1.3.60+ 开始!定义一个数据类,添加@Parcelize注解并扩展Parcelable:
@Parcelize
data class People(val id: String, val name: String) : Parcelable
Run Code Online (Sandbox Code Playgroud)
添加到意图:
@Parcelize
data class People(val id: String, val name: String) : Parcelable
Run Code Online (Sandbox Code Playgroud)
在MyTargetActivity:
val people: People = intent.getParcelableExtra("people_data")
Run Code Online (Sandbox Code Playgroud)
如果您还没有,请在您的应用程序的build.gradle. 这也启用了数据绑定和其他强大的高级功能
apply plugin: 'kotlin-android-extensions'
Run Code Online (Sandbox Code Playgroud)
fir*_*b86 17
在对象中实现Serializable:
data class Object (
var param1: Int? = null,
var param2: String? = null
) : Serializable
Run Code Online (Sandbox Code Playgroud)
要么
class Object : Serializable {
var param1: Int? = null,
var param2: String? = null
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用Intent传递对象:
val object = Object()
...
val intent = Intent(this, Activity2::class.java)
intent.putExtra("extra_object", object as Serializable)
startActivity(intent)
Run Code Online (Sandbox Code Playgroud)
最后,在Activity2中,您将获得以下对象:
val object = intent.extras.get("extra_object") as Object
Run Code Online (Sandbox Code Playgroud)
Ank*_*mar 11
找到了一种更好的方法:
在你的gradle中:
apply plugin: 'org.jetbrains.kotlin.android.extensions'
android {
androidExtensions {
experimental = true
}
}Run Code Online (Sandbox Code Playgroud)
在您的数据类中:
@Parcelize
data class Student(val id: String, val name: String, val grade: String) : Parcelable
Run Code Online (Sandbox Code Playgroud)
在源活动中:
val intent = Intent(context, Destination::class.java)
intent.putExtra("student_id", student)
context.startActivity(intent)
Run Code Online (Sandbox Code Playgroud)
在目标活动中:
val intent = Intent(context, Destination::class.java)
intent.putExtra("student_id", student)
context.startActivity(intent)
Run Code Online (Sandbox Code Playgroud)
我找到了一种使用 Parcelable 将对象从一个活动传递到另一个活动的更好方法,它比 Serialization Android更快 :Parcelable 和 Serializable 之间的区别?
首先,在 build.gradle(app) 中添加这些代码行
我从这里得到了答案
apply plugin: 'kotlin-android-extensions' in app.grable
@Parcelize
class Model(val title: String, val amount: Int) : Parcelable
Run Code Online (Sandbox Code Playgroud)
通过 Intent --->
val intent = Intent(this, DetailActivity::class.java)
intent.putExtra(DetailActivity.EXTRA, model)
startActivity(intent)
Run Code Online (Sandbox Code Playgroud)
从意图中获取 --->
val model: Model = intent.getParcelableExtra(EXTRA)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24074 次 |
| 最近记录: |