文档章节

Android 两个Activity之间信息的交互

80后小子
 80后小子
发布于 2015/03/04 17:41
字数 735
阅读 580
收藏 5
点赞 0
评论 0

      出处: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
Service的生命周期与Activity生命周期区别

碰到一面试题 简述activity/service生命周期? 组件的生命周期 应用程序组件都有一个生命周期,从响应Intent的Android实例开始到这个实例被销毁。在这期间,他们或许有效或许无效,有效时或许...

xiahuawuyu
2012/07/24
0
0
Activity 与 Fragment 之间相互通信

欢迎转载,但请保留文章原始出处→→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4000390.html 联系方式:smyhvae@163.com 【正文】 一、接口回...

iSnowFlake
2015/11/19
0
1
android-Fragment在生命周期做了什么?

FragmentActivity 生命周期,以及所在生命周期做了什么事? OnAttach:调用该方法时,Fragment会被连接到它的父Activity上;获取对父Activity的引用。 OnCreate:调用该方法来进行fragment的初...

pointerException
2015/07/28
0
0
创建灵活的用户界面-Android Fragment

创建灵活的用户界面-android Fragment. Android Support Library(支持库)提供了包含一个API库的JAR文件,当你的应用运行在Android早期版本时,Support Library(支持库)允许你的应用使用最近版...

顶层设计
2013/02/26
0
0
Android Activity生命周期

Android中Activity的生命周期,我今天特意在重新总结一下. Activity有四种本质区别的状态: (1)在屏幕的前台(Activity栈顶),叫做活动状态或者运行状态(active or running) (2)如果一个A...

gavin_jin
2012/02/27
0
0
Android Activity和Intent机制

Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity具有自己的生命周期(见http://www.cnblogs.com/feisky/archive/2010/01/01/1637427.html,由系统控制生...

垂盆草
2012/08/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
12
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
1
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
1
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
今天
3
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部