[置顶] Activity之间传递消息(Intent)
2016-06-19 17:12
393 查看
大家都知道一个Activity就是一个手机屏幕页面,通常一个APP中包含大量这样的页面提供给用户交互,那么如何实现不同的Activity之间切换和信息交流呢?本文将以一个简单的例子讲解Activity 的切换和消息传递的方法。细心的读者可能注意到其实标题包含两方面的内容:1.Activity 之间切换 2.Activity之间传递信息。下面就分别讨论如下。
1.Activity之间切换:
Activity 之间切换大体可以分为两类,一种是同一个程序以内的不同Activity之间切换,比如手机QQ登录界面完成信息认证后,启动下一个登录后主界面,这个界面的之间切换始终在QQ一个应用程序之内,也就是同一程序内的Activtity之间切换。还有一种就是不同的应用程序之间的切换,比如你在QQ状态栏看到了JD的产品推广,不小心点击了,这时候程序马上切换到JD手机APP了,这种情况就是不同程序之间的Activity切换.完成不同Activity之间切换的方法有很多,下面主要简单的介绍一下显式调用方法:
intent.setClass(this,nextActivity.class);//同一个package 内的不同Activity之间调用
intent.setClassName(this,"com.example.xxxx.OtherActivity");
intent.setClassName("com.example","com.example.OtherActivity");//打开另外一个APP,其中第一个参数为报名,第二个为类名
Component comp = new Component(this,OtherActivity.class);//没有用过
intent.setComponent(comp);
2.Activity之间传递消息:
Activity之间传递消息可以通过Bundle类来完成,其数据结构类似于Map,由<key,value>对组成,bundle类提供了常见的string,bool ,int等等数据类型的存储和查询操作,例如setString()和getString()方法分别实现对bundle对象的数值的存储和获取。因此对于不同Activity 之间的数据传输可以通过Bundle完成。在调用方中设置要传递的数值,并将其putExtras到intent中,在被调用Activity中获得bundle中存取的数据即可.
3.搞清楚了以上的两个问题,我们就用一个简单的例子实现不同的Activity之间数据传输吧!
新建两个界面xml文件.用于与用户交互
MainActivity.xml ,主要包括RadionButton按钮用于显示用户的选择,将当前选中的RadioButton内容传递个第二个Activity并在其中显示:
第二个Activity,主要将从MainActivity中的值获得并显示:
在AndroidMainfest.xml文件中注册第二个Activitiy,这样在在Intent调用startActivity时才会找到对应的Activity。
启动Activity 的方法步骤如下:
新建一个Activity
设置调用Activity
启动Intent
关闭当前Activity 将控制权交给调用Activity
对应以上两个xml界面文件的Java控制代码如下:
MainActivity.java
SecondActivity.java 主要完成返回主界面和显示主界面传过来的值.
运行结果图:
![](http://img.blog.csdn.net/20160619183430502?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20160619183450408?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Not:版权所有,转载请注明出处,谢谢!
1.Activity之间切换:
Activity 之间切换大体可以分为两类,一种是同一个程序以内的不同Activity之间切换,比如手机QQ登录界面完成信息认证后,启动下一个登录后主界面,这个界面的之间切换始终在QQ一个应用程序之内,也就是同一程序内的Activtity之间切换。还有一种就是不同的应用程序之间的切换,比如你在QQ状态栏看到了JD的产品推广,不小心点击了,这时候程序马上切换到JD手机APP了,这种情况就是不同程序之间的Activity切换.完成不同Activity之间切换的方法有很多,下面主要简单的介绍一下显式调用方法:
intent.setClass(this,nextActivity.class);//同一个package 内的不同Activity之间调用
intent.setClassName(this,"com.example.xxxx.OtherActivity");
intent.setClassName("com.example","com.example.OtherActivity");//打开另外一个APP,其中第一个参数为报名,第二个为类名
Component comp = new Component(this,OtherActivity.class);//没有用过
intent.setComponent(comp);
2.Activity之间传递消息:
Activity之间传递消息可以通过Bundle类来完成,其数据结构类似于Map,由<key,value>对组成,bundle类提供了常见的string,bool ,int等等数据类型的存储和查询操作,例如setString()和getString()方法分别实现对bundle对象的数值的存储和获取。因此对于不同Activity 之间的数据传输可以通过Bundle完成。在调用方中设置要传递的数值,并将其putExtras到intent中,在被调用Activity中获得bundle中存取的数据即可.
3.搞清楚了以上的两个问题,我们就用一个简单的例子实现不同的Activity之间数据传输吧!
新建两个界面xml文件.用于与用户交互
MainActivity.xml ,主要包括RadionButton按钮用于显示用户的选择,将当前选中的RadioButton内容传递个第二个Activity并在其中显示:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.yangchao.datatramsfertoactivity.MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <RadioGroup android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/RG_OS" android:text="Slect a OS"> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/RG_OS_RB_1" android:text="Andorid"/> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/RG_OS_RB_2" android:text="Symbian"/> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/RG_OS_RB_3" android:text="Other"/> </RadioGroup> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Submit" android:id="@+id/button_submit" android:layout_below="@+id/RG_OS" android:layout_alignRight="@+id/RG_OS" android:layout_alignEnd="@+id/RG_OS" /> </RelativeLayout>
第二个Activity,主要将从MainActivity中的值获得并显示:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.yangchao.datatramsfertoactivity.SecondActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Back" android:id="@+id/button_back" android:layout_gravity="center_horizontal" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textview"/> </LinearLayout>
在AndroidMainfest.xml文件中注册第二个Activitiy,这样在在Intent调用startActivity时才会找到对应的Activity。
<activity android:name="com.example.yangchao.datatramsfertoactivity.SecondActivity" android:label="SecondActivity">
启动Activity 的方法步骤如下:
新建一个Activity
设置调用Activity
启动Intent
关闭当前Activity 将控制权交给调用Activity
对应以上两个xml界面文件的Java控制代码如下:
MainActivity.java
package com.example.yangchao.datatramsfertoactivity; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.content.Intent; import android.view.View; import android.widget.Button; import android.view.View.OnClickListener; import android.widget.RadioButton; import android.widget.RadioGroup; public class MainActivity extends AppCompatActivity { RadioGroup RG_OS; RadioButton RG_OS_RB_1,RG_OS_RB_2,RG_OS_RB_3; @Override protected void onCreate(Bundle savedInstanceState) { Button button_submit,button_back; super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RG_OS=(RadioGroup)findViewById(R.id.RG_OS); RG_OS_RB_1=(RadioButton)findViewById(R.id.RG_OS_RB_1); RG_OS_RB_2=(RadioButton)findViewById(R.id.RG_OS_RB_2); RG_OS_RB_3=(RadioButton)findViewById(R.id.RG_OS_RB_3); button_submit=(Button)findViewById(R.id.button_submit); button_submit.setOnClickListener(new ButtonClickListener()); } class ButtonClickListener implements OnClickListener{ public void onClick(View arg0) { Intent myintent =new Intent();//新建一个Intent 对象系,用于启动第二个activity myintent.setClass(MainActivity.this,SecondActivity.class);//设置调用activity类信息 Bundle mybundle=new Bundle();//新建一个Bundle对象,用于传递Mainactivity中的信息 if(RG_OS_RB_1.isChecked()) mybundle.putString("Selected_radioButton",(String)RG_OS_RB_1.getText()); else if(RG_OS_RB_2.isChecked()) mybundle.putString("Selected_radioButton",(String)RG_OS_RB_2.getText()); else if(RG_OS_RB_3.isChecked()) mybundle.putString("Selected_radioButton",(String)RG_OS_RB_3.getText()); else mybundle.putString("Selected_radioButton",null); myintent.putExtras(mybundle);//Intent中加入附带信息 MainActivity.this.startActivity(myintent);//启动Intent标的的activity
MainActivity.this.finish();//关闭当前activity } } }
SecondActivity.java 主要完成返回主界面和显示主界面传过来的值.
package com.example.yangchao.datatramsfertoactivity; /** * Created by YangChao on 2016/6/18. */ import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.view.View.OnClickListener; public class SecondActivity extends Activity{ TextView textView; Button button_back; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); textView=(TextView)findViewById(R.id.textview); button_back=(Button)findViewById(R.id.button_back); button_back.setOnClickListener(new ButtonClickListener()); Intent myinten=this.getIntent(); Bundle mybundle=myinten.getExtras(); String getString=mybundle.getString("Selected_radioButton"); if(getString.equals(null)) textView.setText("No"); else textView.setText(getString); } class ButtonClickListener implements OnClickListener{ public void onClick(View arg0) { Intent myintent =new Intent(); myintent.setClass(SecondActivity.this,MainActivity.class); SecondActivity.this.startActivity(myintent); SecondActivity.this.finish(); } } }
运行结果图:
Not:版权所有,转载请注明出处,谢谢!
相关文章推荐
- SwingUtilities.invokeLater()和invokeAndWait()的使用
- win7系统 找不到该文件的位置 无法删除 怎么解决?
- Javascript模块化编程(三):require.js的用法
- 学习进度条(第十六周)
- Ruby on Rails(二) - 初探Ruby on Rails, 搭建一个博客项目并发布(草稿)
- 绝佳日志实践
- Java微信统一下单接口的调用--XStream为什么要替换下划线 美元符号
- JAVA学习总结十七
- 小tip: margin:auto实现绝对定位元素的水平垂直居中
- Ubuntu 常见问题
- [置顶] iOS应用程序执行流程
- Acdream 1417 Numbers(暴力枚举)
- Ubuntu 16.04下指定Sublime Text 3 默认python编译版本
- 2016.6.20 Timeline之plan
- 太阳光与灯光的区别
- spring IOC装配bean
- 剑指offer--空格替换
- Javascript模块化编程(二):AMD规范
- CE6810交换机通过FTP进行文件传输
- @ManyToOne与@OneToMany