Android 9 中 Activity 之间的数据回传

在 Android 开发中,我们经常需要在不同的 Activity 之间传递数据。

使用 Intent 传递数据

在 Android 中,我们主要是通过 Intent 来在 Activity 之间传递数据的。

传递基本数据类型

需要用 Intent 的 putExtra() 方法来携带数据,然后在目标 Activity 中用 getIntent().getXXXExtra() 方法获取数据。

例如在 Activity A 中:

Intent intent = new Intent(this, BActivity.class);
intent.putExtra("data1", "This is Activity A");
intent.putExtra("data2", 12345);
startActivity(intent);

在 Activity B 中:

Intent intent = getIntent();
String data1 = intent.getStringExtra("data1"); // 获取字符串
int data2 = intent.getIntExtra("data2", 0); // 获取整数

传递自定义对象

对于自定义的 Java 对象,需要让对象实现 Serializable 接口,然后通过 Intent 携带,最后在目标 Activity 中解析出对象。

例如有一个 User 类:

public class User implements Serializable {
    private String name;
    private int age;
    
    // 省略 getter/setter 方法
}

在 Activity A 中:

User user = new User("John", 20);
Intent intent = new Intent(this, BActivity.class); 
intent.putExtra("user", user);
startActivity(intent);

在 Activity B 中:

Intent intent = getIntent();
User user = (User) intent.getSerializableExtra("user");

这样我们就可以在两个 Activity 间传递自定义对象了。

使用 ViewModel 传递数据

另一种 Activity 间传递数据的方式是使用 ViewModel。ViewModel 的数据可以在不同的 Activity 中共享。

例如有一个 UserViewModel 类:

public class UserViewModel extends ViewModel {

    private MutableLiveData<User> user;
    
    public LiveData<User> getUser() {
        if (user == null) {
            user = new MutableLiveData<>();
        }
        return user;
    }
    
    public void setUser(User user) {
        this.user.setValue(user); 
    }

}

在 Activity A 中:

UserViewModel viewModel = new ViewModelProvider(this).get(UserViewModel.class);
User user = new User("John", 20);
viewModel.setUser(user);

在 Activity B 中:

UserViewModel viewModel = new ViewModelProvider(this).get(UserViewModel.class);
viewModel.getUser().observe(this, user -> {
  // 获取 user 数据
});

这样通过 ViewModel 就可以方便地在两个 Activity 之间共享数据了。

总结

  • 使用 Intent 可以在 Activity 间传递基础数据类型和实现了 Serializable 的自定义对象
  • 使用 ViewModel 可以在不同的 Activity 中共享数据

掌握了这两种方法,就可以非常方便地在 Android 应用中的不同界面中传递数据了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android activity 之间数据回传可以通过 startActivityForResult 和 onActivityResult 方法来实现。 首先,在调用下一个 activity 之前,需要使用 startActivityForResult 方法启动该 activity。在 startActivityForResult 方法,可以传递一个 requestCode 参数,该参数用于标识该请求的唯一性。 在新的 activity ,当需要返回数据给调用该 activityactivity 时,可以使用 setResult 方法设置返回结果,并在 setResult 方法传递一个 resultCode 参数和一个 Intent 对象。其,resultCode 参数用于标识返回结果的状态,而 Intent 对象则用于携带返回的数据。 最后,在调用该 activityactivity ,需要重写 onActivityResult 方法,并在该方法处理返回的结果。在 onActivityResult 方法,可以通过 requestCode 和 resultCode 参数来确定返回结果的来源和状态,通过 data 参数来获取返回的数据。 以下是一个示例代码: 在调用 activity 的代码: ``` Intent intent = new Intent(this, SecondActivity.class); startActivityForResult(intent, REQUEST_CODE); ``` 在新的 activity : ``` Intent intent = new Intent(); intent.putExtra("data", "Hello, World!"); setResult(RESULT_OK, intent); finish(); ``` 在调用该 activityactivity : ``` @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { String result = data.getStringExtra("data"); // 处理返回的数据 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值