Android 组件系列之Activity的传值和回传值.docx
《Android 组件系列之Activity的传值和回传值.docx》由会员分享,可在线阅读,更多相关《Android 组件系列之Activity的传值和回传值.docx(16页珍藏版)》请在冰豆网上搜索。
![Android 组件系列之Activity的传值和回传值.docx](https://file1.bdocx.com/fileroot1/2022-11/16/f688d201-0044-41a2-9ade-85cdca8b0659/f688d201-0044-41a2-9ade-85cdca8b06591.gif)
Android组件系列之Activity的传值和回传值
Android组件系列-----Activity的传值和回传值
在这篇随笔里将讲解Activity的传值和回传值。
一、通过startActivity来进行Activity的传值
在Android中,如果我们要通过一个Activity来启动另一个Activity,可以使用startActivity(Intentintent)方法来传入一个Intent对象,这个Intent对象我们可以精确的指定我们需要跳转的Activity上,或者通过Intent对象来指定我们要完成的一个action操作。
①.通过setClass方法来指定我们要跳转的Activity
Intentintent=newIntent();
intent.setClass(MainActivity.this,SecondActivity.class);
②.通过setAction方法来我们要完成的一个action操作
Intentintent=newIntent();
intent.setAction("com.xiaoluo.android_intent.second");
通过这种方式可以来指定我们的Intent对象要完成某个操作,这个操作可以是启动一个Activity,我们可以在AndroidManifest.xml中在元素下指定一个对象,然后其子元素声明一个元素,这样我们可以将这个action动作绑定到了这个Activity上,即Android操作系统会去找与intent对象中指定的action名字的对象,然后执行相应的动作,例如:
android:
name="com.xiaoluo.android_intent.SecondActivity"
android:
label="SecondActivity">
name="com.xiaoluo.android_intent.second"/>
name="android.intent.category.DEFAULT"/>
这样我们的Intent对象,在启动时,就会找到名字为 com.xiaoluo.android_intent.second的对象,来启动我们的SecondActivity。
我们来看看如何在Activity对象中进行值的传递,也是通过Intent对象的各种putExtra方法来进行传递:
MainActivity:
publicclassMainActivityextendsActivity
{
privateButtonbutton;
@Override
protectedvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(newButtonListener());
}
classButtonListenerimplementsOnClickListener
{
@Override
publicvoidonClick(Viewv)
{
//Intentintent=newIntent();
//intent.setClass(MainActivity.this,SecondActivity.class);
Intentintent=newIntent();
intent.setAction("com.xiaoluo.android_intent.second");
intent.putExtra("com.xiaoluo.android_intent.age",20); //第一个参数指定name,android规范是以包名+变量名来命名,后面是各种类型的数据类型
intent.putExtra("com.xiaoluo.android_intent.name","xiaoluo");
Bundlebundle=newBundle(); // Bundle的底层是一个HashMapbundle.putString("hello","world");
intent.putExtra("bundle",bundle);
startActivity(intent);
}
}
@Override
publicbooleanonCreateOptionsMenu(Menumenu)
{
//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
getMenuInflater().inflate(R.menu.main,menu);
returntrue;
}
}
SecondActivity:
publicclassSecondActivityextendsActivity
{
privateTextViewtextView;
privatefinalStringTAG="SecondActivity";
@Override
protectedvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
textView=(TextView)findViewById(R.id.textView);
//得到跳转到该Activity的Intent对象
Intentintent=getIntent();
intage=intent.getIntExtra("com.xiaoluo.android_intent.age",10);
Stringname=intent.getStringExtra("com.xiaoluo.android_intent.name");
Bundlebundle=intent.getBundleExtra("bundle");
Stringworld=bundle.getString("hello");
Log.i(TAG,age+","+name+","+world);
textView.setText(name+":
"+age+","+world);
System.out.println(intent);
}
}
在第二个Activity对象中,可以通过getIntent()方法来得到跳转到这个Activity的Intent对象,然后通过Intent对象的各种getXXExtra方法来得到我们的传过来的值。
AndroidManifest.xml文件如下:
xmlversion="1.0"encoding="utf-8"?
>
android="
package="com.xiaoluo.android_intent"
android:
versionCode="1"
android:
versionName="1.0">
android:
minSdkVersion="8"
android:
targetSdkVersion="18"/>
android:
allowBackup="true"
android:
icon="@drawable/ic_launcher"
android:
label="@string/app_name"
android:
theme="@style/AppTheme">
android:
name="com.xiaoluo.android_intent.MainActivity"
android:
label="@string/app_name">
name="android.intent.action.MAIN"/>
name="android.intent.category.LAUNCHER"/>
android:
name="com.xiaoluo.android_intent.SecondActivity"
android:
label="SecondActivity">
name="com.xiaoluo.android_intent.second"/>
name="android.intent.category.DEFAULT"/>
这样我们就可以实现Activity直接的值的传递。
二、通过startActivityForResult方法来得到Activity的回传值
在一些情况下,我们通过Aactivity跳转到Bactivity上,这时希望Aactivtiy能从Bactivity上得到一些返回值,这个时候我们就不能使用startActivity方法了,而是使用startActivityForResult方法来完成我们的操作。
例如,我们希望完成下面一个功能,在MainActivity上,写上一个算术表达式,然后跳转到到第二个SecondActivity上,在这个Activity上将第一个Activity的表达式显示出来,然后我们可以输入我们的算术表达式结果,然后点击按钮,将这个结果值又返回给我们的MainActivity,并将结果填充到算术表达式中,具体看如下代码:
activity_main.xml:
android="
xmlns:
tools="
android:
layout_width="match_parent"
android:
layout_height="match_parent"