1、Android 组件系列之Activity的传值和回传值Android 组件系列-Activity的传值和回传值 在这篇随笔里将讲解Activity的传值和回传值。一、通过startActivity来进行Activity的传值在Android中,如果我们要通过一个Activity来启动另一个Activity,可以使用 startActivity(Intent intent)方法来传入一个Intent对象,这个Intent对象我们可以精确的指定我们需要跳转的Activity上,或者通过Intent对象来 指定我们要完成的一个action操作。.通过setClass方法来指定我们要跳转的Activ
2、ityIntent intent = new Intent();intent.setClass(MainActivity.this, SecondActivity.class);.通过setAction方法来我们要完成的一个action操作Intent intent = new Intent();intent.setAction(com.xiaoluo.android_intent.second);通过这种方式可以来指定我们的Intent对象要完成某个操作,这个操作可以是启动一个Activity,我们可以在 AndroidManifest.xml中在 元素下指定一个 对象,然后其子元素声明一个
3、 元素,这样我们可以将这个action动作绑定到了这个Activity上,即Android操作系统会去找与intent对象中指定的action名字 的 对象,然后执行相应的动作,例如: 这样我们的Intent对象,在启动时,就会找到名字为com.xiaoluo.android_intent.second 的对象,来启动我们的SecondActivity。我们来看看如何在Activity对象中进行值的传递,也是通过 Intent 对象的各种putExtra方法来进行传递:MainActivity:public class MainActivity extends Activity private
4、 Button button; Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button); button.setOnClickListener(new ButtonListener(); class ButtonListener implements OnClickListener Override
5、 public void onClick(View v) / Intent intent = new Intent();/ intent.setClass(MainActivity.this, SecondActivity.class); Intent intent = new Intent(); intent.setAction(com.xiaoluo.android_intent.second); intent.putExtra(com.xiaoluo.android_intent.age, 20);/ 第一个参数指定name,android规范是以包名+变量名来命名,后面是各种类型的数据
6、类型 intent.putExtra(com.xiaoluo.android_intent.name, xiaoluo); Bundle bundle = new Bundle();/Bundle的底层是一个HashMapString, Object bundle.putString(hello, world); intent.putExtra(bundle, bundle); startActivity(intent); Override public boolean onCreateOptionsMenu(Menu menu) / Inflate the menu; this adds i
7、tems to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; SecondActivity:public class SecondActivity extends Activity private TextView textView; private final String TAG = SecondActivity; Override protected void onCreate(Bundle savedInstanceState) super.onCr
8、eate(savedInstanceState); setContentView(R.layout.second); textView = (TextView)findViewById(R.id.textView); / 得到跳转到该Activity的Intent对象 Intent intent = getIntent(); int age = intent.getIntExtra(com.xiaoluo.android_intent.age, 10); String name = intent.getStringExtra(com.xiaoluo.android_intent.name);
9、Bundle bundle = intent.getBundleExtra(bundle); String world = bundle.getString(hello); Log.i(TAG, age + , + name + , + world); textView.setText(name + : + age + , + world); System.out.println(intent); 在第二个Activity对象中,可以通过 getIntent() 方法来得到跳转到这个Activity的Intent对象,然后通过 Intent 对象的各种 getXXExtra 方法来得到我们的传
10、过来的值。AndroidManifest.xml文件如下: 这样我们就可以实现Activity直接的值的传递。二、通过startActivityForResult方法来得到Activity的回传值在一些情况下,我们通过 A activity跳转到 B activity上,这时希望 A activtiy能从 B activity上得到一些返回值,这个时候我们就不能使用startActivity方法了,而是使用 startActivityForResult方法来完成我们的操作。例如,我们希望完成下面一个功能,在MainActivity上,写上一个算术表达式,然后跳转到到第二个SecondActivity上,在这个 Activity上将第一个Activity的表达式显示出来,然后我们可以输入我们的算术表达式结果,然后点击按钮,将这个结果值又返回给我们的 MainActivity,并将结果填充到算术表达式中,具体看如下代码:activity_main.xml:RelativeLayout xmlns:android= xmlns:tools= android:layout_width=match_parent android:layout_height=match_parent
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1