利用Bundle实现Android Activity间消息的传递

简介: 利用Bundle实现Android Activity间消息的传递

Activity间的通讯是通过Intent类。比如有两个类A.class, B.class由A启动新的activity B(单向),当B退出的时候A将不会接收到任何信息:Intent i = new Intent(this,B.class); startActivity(i); 由A启动新的actvity B(双向),当B退出的时候A的onActivityForResult方法将会被调用给定的requestCode。A.class添加代码:Java代码 Intent i = new Intent(this, B.class);   i.putExtra(key, value);  startActivityForResult(i, ACTIVITY_CODE);        B.class添加代码  Java代码 //这里获取A传过来的数据   Bundle extras = this.getIntent().getExtras();   //这里通过key的方式获取值   String value = extras.getString(key);    Java代码 //把值传回  A.class Bundle bundle = new Bundle();   bundle.putString(key,value);   Intent intent = new Intent();   intent.putExtras(bundle);   setResult(RESULT_OK, intent); finish();  

利用Bundle是一种比较方便的办法。

程序的效果是活动A向B跳转的同时发送一字符串,B读出字符串。

先在AndroidManifest.xml中定义一个新的Activity,target:

Xml代码

<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="https://schemas.android.com/apk/res/android"  
      package="com.ray.test"  
      android:versionCode="1"  
      android:versionName="1.0">  
    <application android:icon="@drawable/icon" android:label="@string/app_name">  
        <activity android:name=".TestBundle"  
                  android:label="@string/app_name">  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity>  
        <activity android:name=".Target"></activity>  
    </application>  
    <uses-sdk android:minSdkVersion="3" />  
</manifest>

第一个活动的代码如下:

Java代码

package com.ray.test;  
import android.app.Activity;  
import android.content.Intent;  
import android.os.Bundle;  
import android.view.MotionEvent;  
public class TestBundle extends Activity {  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
    }  
    public boolean onTouchEvent(MotionEvent event) {  
        Intent intent = new Intent();  
        intent.setClass(TestBundle.this, Target.class);  
        Bundle mBundle = new Bundle();  
        mBundle.putString("Data", "ray'blog");//压入数据  
        intent.putExtras(mBundle);  
        startActivity(intent);  
        finish();  
        return super.onTouchEvent(event);  
    }  
}

将要跳转到的活动代码:

Java代码

package com.ray.test;  
import android.app.Activity;  
import android.os.Bundle;  
public class Target extends Activity{  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        Bundle bundle = getIntent().getExtras();    
        String data=bundle.getString("Data");//读出数据  
        setTitle(data);  
    }  
}

嗯, 不错, 如果要从Target往TestBundle回传数据/信息, 可以在TestBundle里面:

startActivityForResult(intent, 1333); // 1333是request code

然后在Target里面, 回传的时候:

Intent data = new Data();
data.putExtra("msg", "my message");
setResult(RESULT_OK, data);
finish();

在TestBundle里出来传回来的数据/信息:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    String msg = data.getExtras.getString("msg");
// ...
}

还有个东西需要留意的就是requestCode 它是作为标识此次intent出现的,他可以设置为任何你想要的int值,从而在onActivityResult中据此做出不同的处理

相关文章
|
11天前
|
Android开发 开发者
Android UI设计中,Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等,定义在`styles.xml`。
【6月更文挑战第26天】Android UI设计中,Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等,定义在`styles.xml`。要更改主题,首先在该文件中创建新主题,如`MyAppTheme`,覆盖所需属性。然后,在`AndroidManifest.xml`中应用主题至应用或特定Activity。运行时切换主题可通过重新设置并重启Activity实现,或使用`setTheme`和`recreate()`方法。这允许开发者定制界面并与品牌指南匹配,或提供多主题选项。
19 6
|
12天前
|
Android开发 开发者
Android UI中的Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等。要更改主题
【6月更文挑战第25天】Android UI中的Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等。要更改主题,首先在`styles.xml`中定义新主题,如`MyAppTheme`,然后在`AndroidManifest.xml`中设置`android:theme`。可应用于全局或特定Activity。运行时切换主题需重置Activity,如通过`setTheme()`和`recreate()`方法。这允许开发者定制界面以匹配品牌或用户偏好。
15 2
|
23天前
|
Android开发
Android面试题之activity启动流程
该文探讨了Android应用启动和Activity管理服务(AMS)的工作原理。从Launcher启动应用开始,涉及Binder机制、AMS回调、进程创建、Application和Activity的生命周期。文中详细阐述了AMS处理流程,包括创建ClassLoader、加载APK、启动Activity的步骤,以及权限校验和启动模式判断。此外,还补充了activity启动流程中AMS的部分细节。欲了解更多内容,可关注公众号“AntDream”。
16 1
|
1月前
|
存储 Java Android开发
Android上在两个Activity之间传递Bitmap对象
Android上在两个Activity之间传递Bitmap对象
17 2
|
9天前
|
Android开发 UED 开发者
Android Activity启动模式详解
Android Activity启动模式详解
13 0
|
9天前
|
Android开发 UED
Android Activity的生命周期详解
Android Activity的生命周期详解
9 0
|
9天前
|
Android开发
Android Activity跳转详解
Android Activity跳转详解
14 0
|
1月前
|
Java Android开发 C++
42. 【Android教程】活动:Activity
42. 【Android教程】活动:Activity
22 2
|
2月前
|
Android开发 数据库管理
Android如何在Activity和Service之间传递数据
Android如何在Activity和Service之间传递数据
30 3
|
API Android开发 图形学
【Unity3D】Bundle打包及加载流程Android篇
生成Bundle文件主要是如何对资源进行设置Bundle名及其分类的过程。目前有两种方式,第一种就是在编辑器里面设置每个资源的Bundle名称(如图1),这是最简单直观的操作方式;另一种方式就是通过编写代码并配合资源配置文件进行控制,先通过代码遍历项目工程的资源然后根据资源配置设置其Bundle名称,也可以暴力的按照资源类型进行分类,由于不同项目的控制方式不同,因此就不过多介绍。
579 0
【Unity3D】Bundle打包及加载流程Android篇