文档章节

Android 两个Activity之间信息的交互

80后小子
 80后小子
发布于 2015/03/04 17:41
字数 735
阅读 591
收藏 5

      出处:http://blog.csdn.net/veryitman/article/details/6611138

      感谢原文作者,整个逻辑很清楚,这备份下

      多个 Activity 之间可以通过 Application 共享数据,在这里我就让两个 Activity 共享 Handler(更新UI,我一般使用 Handler),主 Activity 中更新 UI,另一个 Activity 发送更新UI的消息。这样就达到在主Activity更新UI的目的。好吧,具体看代码!

1. 主 Activity 的 main.xml

 <?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    >  
    <TextView  
        android:id="@+id/tv"    
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content"   
        android:text="changed before: This is MasterActivity!"  
        />  
    <Button   
        android:layout_marginTop="15dip"  
        android:id="@+id/btn_to"    
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content"   
        android:text="To OtherActivity"/>  
      
</LinearLayout>

 

2. 主 Activity 的Java 代码

 package mark.zhang;  
  
import android.app.Activity;  
import android.content.Intent;  
import android.graphics.Color;  
import android.os.Bundle;  
import android.os.Handler;  
import android.os.Message;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.TextView;  
  
public class MasterActivity extends Activity {  
    // 用于msg.what值  
    private static final int CHANGED = 0x0010;  
      
    private Button btn_to = null;  
    private TextView tv = null;  
      
    private MyHandler handler = null;  
      
    private MyAPP mAPP = null;  
      
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
          
        mAPP = (MyAPP) getApplication();  
        handler = new MyHandler();  
          
        tv = (TextView) findViewById(R.id.tv);  
        btn_to = (Button) findViewById(R.id.btn_to);  
        // 设置监听器  
        btn_to.setOnClickListener(new OnClickListener() {  
  
            @Override  
            public void onClick(View v) {  
                // 设置共享变量  
                mAPP.setHandler(handler);  
                // 启动另一个Activity  
                Intent intent = new Intent(MasterActivity.this,  
                        ToChangeViewActivity.class);  
                startActivity(intent);  
            }  
        });  
    }  
      
    /** 
     * 自己实现 Handler 处理消息更新UI 
     *  
     * @author mark 
     */  
    final class MyHandler extends Handler {  
        @Override  
        public void handleMessage(Message msg) {  
            super.handleMessage(msg);  
            if(msg.what == CHANGED) { // 更新UI  
                tv.setText("changed after: I have be changed by Other Activity!");  
                tv.setBackgroundColor(Color.BLUE);  
                  
                btn_to.setText("I have been changed!");  
                btn_to.setBackgroundColor(Color.RED);  
            }  
        }  
    }  
}

 

3. 自实现Application

 package mark.zhang;  
  
import mark.zhang.MasterActivity.MyHandler;  
import android.app.Application;  
  
/** 
 * 自己实现Application,实现数据共享 
 *  
 * @author mark 
 * 
 */  
public class MyAPP extends Application {  
    // 共享变量  
    private MyHandler handler = null;  
      
    // set方法  
    public void setHandler(MyHandler handler) {  
        this.handler = handler;  
    }  
      
    // get方法  
    public MyHandler getHandler() {  
        return handler;  
    }  
}

 

4. 改变主Activity UI 的Activity

该 Activity 是 ToChangeViewActivity,Java、以及布局文件 show.xml 代码如下。

 package mark.zhang;  
  
import mark.zhang.MasterActivity.MyHandler;  
import android.app.Activity;  
import android.os.Bundle;  
import android.view.View;  
import android.view.View.OnClickListener;  
  
public class ToChangeViewActivity extends Activity {  
    private static final int CHANGED = 0x0010;  
      
    private MyAPP mAPP = null;  
      
    private MyHandler mHandler = null;  
      
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.show);  
          
        mAPP = (MyAPP) getApplication();  
        // 获得该共享变量实例  
        mHandler = mAPP.getHandler();  
          
        findViewById(R.id.btn_chang).setOnClickListener(new OnClickListener() {  
              
            @Override  
            public void onClick(View v) {  
                // 发送消息  
                mHandler.sendEmptyMessage(CHANGED);  
                ToChangeViewActivity.this.finish();  
            }  
        });  
    }  
}

 

 

 <?xml version="1.0" encoding="utf-8"?>  
<LinearLayout  
  xmlns:android="http://schemas.android.com/apk/res/android"  
  android:orientation="vertical"  
  android:layout_width="fill_parent"  
  android:layout_height="fill_parent"  
  >  
    <TextView  
        android:id="@+id/tv"    
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content"   
        android:text="hello,MasterActivity!"  
        />   
      
    <Button  
        android:id="@+id/btn_chang"    
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content"   
        android:text="change the MasterActivityView..."  
        />   
      
</LinearLayout>

5. 修改manifest.xml文件
这里主要注意两点:

<1> 声明 Application

<2> 注册 ToChangeViewActivity

代码,如下:

 <?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
      package="mark.zhang"  
      android:versionCode="1"  
      android:versionName="1.0">  
    <uses-sdk android:minSdkVersion="7" />  
  
    <application android:name=".MyAPP" android:icon="@drawable/icon" android:label="@string/app_name">  
        <activity android:name=".MasterActivity"  
                  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=".ToChangeViewActivity"></activity>  
  
    </application>  
</manifest>

 

6. 运行效果

点击 " To OtherActivity",进入 ToChangeViewActivity 


再点击“ change the MasterActivityView...”


改变效果


7. 最后思考

这里只是两个Activity之间交互,多个 Activity 之间需要考虑设置 launchMode 即 Activity 的加载模式,更多关于这方面的知识可以参考:

http://blog.csdn.net/androidbluetooth/article/details/6547670

http://download.csdn.net/source/3368975

本文转载自:http://blog.csdn.net/veryitman/article/details/6611138

共有 人打赏支持
80后小子
粉丝 4
博文 84
码字总数 23028
作品 0
海淀
程序员
Activity的生命周期【翻译】

在android系统中用activity栈来管理启动的Activity。每次启动一个新的Activity,它会被置于栈顶,而且成为当前活动窗口,原来的Activity还保留在栈中,在当前新启动的窗口下面,并且在新的窗...

刘遇安
2012/10/18
0
0
android-如何通过接口回调来解决Fragment之间的交互

由于在android的丝线机制综fragment和acitivty会被分别实例化为两个不相干的对象,他们之间的联系由activity的一个成员对象FragmntManager来维护,Fragment实例化后到activity中的fragmentM...

pointerException
2015/07/29
0
3
Android Fragment的使用

可以分为下面的几部分: 使用支持库 创建一个Fragment 创建一个动态UI 多个Fragment之间的通信 1、使用支持库 如果您的应用需要运行在3.0及以上的版本,可以忽略这部分内容。 如果您的应用使...

娶到笨笨
2014/04/07
0
3
【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!

李华明Himi 原创,转载务必在明显处注明: 转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/android-game/301.html 很多童鞋说我的代码运行后,点击home或者back后会程序异常,...

迷途d书童
2012/03/19
0
0
故意为之?安卓9.0以前的全部系统版本均受到“API-breaking”漏洞的影响

        Nightwatch Cybersecurity于8月29日发布消息称,发现Android新漏洞,它使恶意应用程序得以绕过权限检查和现有的防护,访问系统广播信息。根据该通报,这一漏洞的信息如下:  ...

嘶吼RoarTalk
09/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 识别慢性能的宏

Page Profiling 给你了有关页面在载入的时候操作缓慢的邪教,你可以将下面的内容添加到调试(debug)级别: Version 3.1 及其后续版本 设置包名字为 com.atlassian.renderer.v2.components.M...

honeymose
18分钟前
0
0
day93-20180920-英语流利阅读-待学习

时尚之觞:外表光鲜靓丽,其实穷得要命 Lala 2018-09-20 1.今日导读 讲到时尚界,我们脑海里浮现的可能都是模特和设计师光鲜靓丽、从容潇洒的模样。可是,最近在法国出版的一本书却颠覆了我们...

飞鱼说编程
33分钟前
0
0
maven的pom.xml用解决版本问题

maven管理库依赖,有个好处就是连同库的依赖的全部jar文件一起下载,免去手工添加的麻烦,但同时也带来了同一个jar会被下载了不同版本的问题,好在pom的配置里面允许用<exclusion>来排除一些...

JAVA码猿
57分钟前
1
0
20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
2
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
64
11

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部