前言
Jetpack Compose中的页面跳转和传值和之前没什么不同。
要注意的是
组件内尽量不要进行页面的跳转,组件可以设置回调方法,在Activity中进行页面跳转操作。
页面跳转
1 2 3 4 5 6
| Button(onClick = { val intent = Intent(baseContext, MainActivity::class.java) startActivity(intent) }) { Text("登录") }
|
这里要注意的是,获取上下文使用的是baseContext。
页面传值
基本类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| intent.putExtra(String name, boolean value); intent.putExtra(String name, byte value); intent.putExtra(String name, char value); intent.putExtra(String name, short value); intent.putExtra(String name, int value); intent.putExtra(String name, float value); intent.putExtra(String name, long value); intent.putExtra(String name, double value); intent.putExtra(String name, String value); intent.putExtra(String name, int[] value); intent.putExtra(String name, Parcelable value); intent.putExtra(String name, Serializable value); intent.putExtra(String name, CharSequence value);
intent.putStringArrayListExtra(String name, ArrayList<String> value);
|
取值
1 2 3 4 5 6 7 8 9 10 11
| val intent = getIntent() val str = intent.getStringExtra(String name) val bool = intent.getBooleanExtra(String name, boolean defaultValue); val bt = intent.getByteExtra(String name, byte defaultValue); val ch = intent.getCharExtra(String name, char defaultValue); val sh = intent.getShortExtra(String name, short defaultValue); val i = intent.getIntExtra(String name, int defaultValue); val fl = intent.getFloatExtra(String name, float defaultValue); val lg = intent.getLongExtra(String name, long defaultValue); val db = intent.getDoubleExtra(String name, double defaultValue);
|
对象
转JSON字符串
1
| intent.putExtra(String name, String value);
|
获取
1
| val str = intent.getStringExtra(String name)
|
使用Serializable
注意
需要API33及以上版本。
在 Android 中,可以通过 Intent 来传递自定义对象,前提是该对象必须实现 Serializable接口。
Serializable接口允许对象在不同组件间进行序列化和反序列化,以便通过 Intent 进行传递。
1 2 3 4 5
| public class Student implements Serializable{ private static final long serialVersionUID = 1L; public String name; public int age; }
|
kotlin
1 2
| import java.io.Serializable data class CustomObject(val name: String, val age: Int) : Serializable
|
传递方法就是:
1 2
| intent.putExtra(String name, Serializable value); intent.getSerializableExtra(String name);
|
获取
1
| intent.getSerializableExtra("appModel",Student::class.java)
|
使用单例
1 2 3
| object CommonData { var appModel: AppModel? = null }
|
页面返回
1
| onBackPressedDispatcher.onBackPressed()
|