标签:
概述:
在Android中,不同的 Activity实例可能运行在一个进程中,也可能运行在不同的进程中。因此我们需要一种特别的机制帮助我们在Activity之间传递消息。Android中通过intent对象来表示一条消息,一个Intent对象不仅包含有这个消息的目的,还可以包含消息的内容。对于一个Intent对戏,消息”目的地“是必须的,而内容则是可选项。
1.通过Bundle对象来传递
发送:
Intent intent = new Intent("本类文件名,可用this表示 ", "收件人地址,必须加class");
Bundle bndle = new Bundle();//创建email内容
bundle.putBoolean("boolean_key",true);//编写内容
bundle.putString("可自定义变量名","要传值的名字");
intent.putExtra("key",bundle);//封装 email
srartActivity(intent)//启动新的Activity
接受:
Intent intent =getIntent();//接受
Bundle bundle = intent.getBundleExtra("key");//打开email
bundle.getString("变量名");
2.使用Intent定义的Bundle对象
上面通过bundle对象来传递信息,bundle维护了一个HashMap<String,Object>对象,将我们的数据存储在这个HschMap中来进行传递。但是像上面这样的代码稍显复杂。
Intent intent = new Intent("当前类用this",将传递的类加class);
intent.putExtra("boolan_key",true);
intent.putExtra("string_key","string_value");
startActivity(intent);
接受:
Intent intent = getIntent();
intent.getBooleanExtra("boolean_key",false);
intetn.getStringExtra("string_key");
3.Activity返回数据 实例:
Android提供了一个机制,跳转到其他activity时,再返回,可以接受到其他activity返回的值,无需再start新的当前activity。
理论:在activity1中添加信息按钮为它添加onclick事件,实现跳转到activity2,在activity2中添加学生信息,比如姓名,年龄,班级等,然后点击提交,将信息映射到activity1中的TextView.
1)创建activity1XML文件
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:onClick="add"
android:layout_marginLeft="141dp"
android:layout_marginTop="214dp"
android:text="添加信息" />
添加一个button按钮,给一个事件
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:textColor="#FF4A06"
android:textSize="18sp"
android:layout_marginLeft="77dp"
android:layout_marginTop="58dp" />
添加一个TextView让其信息显示
2)创建Activity1
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text=(TextView)findViewById(R.id.textView1);
}
public void add(View v)
{
Intent intent = new Intent(this,newxinxi.class);
startActivityForResult(intent,1);
startActivityForResult 可以一次性完成这项任务,当程序执行到这段代码的时候,假若从Activity1跳转到下一个Activity2,而当这个Activity2调用了finish()方法以后,程序会自动跳转回Activity1,并调用前一个Activity1中的onActivityResult( )方法
这里采用startActivityForResult来做跳转,此处的0为一个依据,可以写其他的值,但一定要>=0
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1&& resultCode==1)
{
String ages=data.getStringExtra("ages");
System.out.println(ages);
text.setText(ages);
}
}
(1)当需要返回值时,那么在启动另一个Activity时要用到Activity2(intent, REQUEST_CODE);
注意第二个参数是请求的int类型的值,这个值要在onActivityResult()方法中和requestCode做判断的,
由此来判断是启动的某个Activity。
(2)onActivityResult()方法中的第二个参数就是Activity2传回来的键,
第三个参数就是Activity2传回来的键对应的值。
3)创建Activity2的XML文件
<TextView android:text="姓名:"
android:layout_width="70dp"
android:id="@+id/name"
android:layout_height="20dp"/>
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" >
创建姓名TextView和EditText
<requestFocus />
<TextView android:text="年龄:"
android:layout_width="70dp"
android:id="@+id/age"
android:layout_height="20dp"/>
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" >
<requestFocus />
</EditText>
创建年龄TextView和EditText
<TextView android:text="学校:"
android:layout_width="70dp"
android:id="@+id/school"
android:layout_height="20dp"/>
<EditText
android:id="@+id/editText3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" >
<requestFocus />
</EditText>
创建学校TextView和EditText
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="tijiao"
android:text="Button" />
创建提交的按钮为其添加事件
4)创建Activity2文件
public void tijiao(View v)
{
school1=(EditText)findViewById(R.id.editText1);
names=(EditText)findViewById(R.id.editText2);
ages=(EditText)findViewById(R.id.editText3);
获取学校姓名和年龄的id
a=ages.getText().toString();
n=names.getText().toString();
s=school1.getText().toString();
取得输入框里的内容
Intent intent=new Intent();
String zong="姓名:"+n+" "+"年龄:"+a+" "+"学校:"+s;
intent.putExtra("ages", zong);
用intent的putExtra进行传值
setResult(1, intent);
1、要接收setResult参数,只有通过startActivityForResult的方式启动,通过startActivity的方式是不行的。
2、哪个activity中写startActivityForResult(a1.this,a2.class),就在a1中的onActivityResult接收a2返回的setResult的值
newxinxi.this.finish();
在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。
当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会再找到这个Activity。
}
Activity的传递数据与实例
标签:
原文地址:http://www.cnblogs.com/Dragonl/p/4814191.html