当前位置: 首页 > article >正文

【Android】Activity组件通信

文章目录

      • 1.使用Intent传递数据
      • 2.使用Bundle传递复杂数据
      • 3.startActivityForResult 和 onActivityResult
      • 4.使用ViewModel共享数据

在Android中,Activity之间的通信是一个常见且重要的任务。以下是一些常用的方法来实现Activity之间的数据传递和通信:

1.使用Intent传递数据

这是最常见的方式,适用于从一个Activity向另一个Activity传递数据。可以通过Intent的putExtra()方法来附加数据,接收方则通过getIntent().getStringExtra()等方法来获取数据。

发送数据Activity:

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, MainActivity2.class);
                intent.putExtra("text","成功跳转过来了");
                startActivity(intent);

            }
        });

接受数据Activity:

 textView2.setText(getIntent().getStringExtra("text"));

2.使用Bundle传递复杂数据

对于更复杂的数据结构,如对象数组或自定义对象,可以使用Bundle来封装数据并通过Intent传递。

发送数据Activity:

                Intent intent = new Intent(MainActivity.this, MainActivity2.class);
                Bundle bundle = new Bundle();
                bundle.putString("text","使用Bundle成功跳转过来了");
                intent.putExtras(bundle);
                startActivity(intent);

接受数据Activity:

        Bundle bundle = getIntent().getExtras();
        if(bundle != null){
            String text = bundle.getString("text");
            textView2.setText(text);
        }else {
            textView2.setText("没有数据");
        }

3.startActivityForResult 和 onActivityResult

当需要从一个Activity启动另一个Activity,并期望从后者返回结果时,可以使用startActivityForResult()方法。在目标Activity中,可以通过setResult()方法设置返回结果,然后调用finish()结束Activity。原Activity通过重写onActivityResult()方法来处理返回的结果。

发送请求的Activity:

Intent intent = new Intent(MainActivity.this, MainActivity2.class);
                startActivityForResult(intent,REQUEST_CODE);

处理结果的Activity:

 @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE && resultCode == SUCCESS_CODE){
            Log.d("ning", "MainActivity2返回成功");
            String response_content = data.getStringExtra("response_content");
            textView.setText(response_content);
        }
    }

返回结果的Activity:

        Intent intent = new Intent();
        intent.putExtra("response_content","这是来自MainActivity2的数据");
        setResult(SUCCESS_CODE,intent);
        finish();

4.使用ViewModel共享数据

在MVVM架构中,ViewModel可以用来在多个Activity或Fragment之间共享数据。ViewModel的生命周期与Activity或Fragment的生命周期独立,因此它可以保留数据,即使Activity或Fragment被重新创建。

创建ViewModel:

public class MyViewModel extends ViewModel {

    private MutableLiveData<String> mText = new MutableLiveData<>();

    public MutableLiveData<String> getText() {
        return mText;
    }

    public void setText(String text) {
        mText.setValue(text);
    }
}

myViewModel.getText().observe(this, new Observer<String>() {
            @Override
            public void onChanged(String s) {
                textView2.setText(s);
            }
        });

http://www.kler.cn/a/379262.html

相关文章:

  • CentOS 7 安装 ntp,自动校准系统时间
  • 独孤思维:工作被骂,副业停滞,算个屁
  • Python并发编程库:Asyncio的异步编程实战
  • 408 计算机组成原理、操作系统:异常和中断的总结
  • Python字典和集合在“用户信息管理”项目中的应用
  • 集合进阶------泛型(JAVA笔记第三十期)
  • 002-Kotlin界面开发之Kotlin旋风之旅
  • Jmeter5.X性能测试
  • 【机器学习】 16. 降维:PCA-主成分分析 Principle Component Analysis
  • Docker部署Portainer CE结合内网穿透实现容器的可视化管理与远程访问
  • Docker配置国内源加速
  • chrome 安装vuejs
  • CocoaPods安装步骤详解 - 2024
  • 封装ES高亮Yxh-Es
  • auxm 注册多个router参数时报错
  • Python数据分析NumPy和pandas(二十、数据清洗和预处理之二:数据转换)
  • 开源模型应用落地-glm模型小试-glm-4-9b-chat-快速体验(一)
  • SpringBoot核心知识点
  • 初识动态规划(由浅入深)
  • Spring Boot 应用开发指南
  • .Net C# 基于EFCore的DBFirst和CodeFirst
  • Docker基本概念汇总(更全面了解Docker)
  • 15. 文件操作
  • Netty 常见组件介绍
  • 鸿蒙生态认识
  • Marvelous Designer导出纹理没有合并