【慢慢学Android】:1.Activity之间的转换以及数据的传递(Intent)

本文详细介绍了Intent在Android应用中的作用,包括如何使用Intent实现Activity之间的跳转,以及如何在Activity之间传递数据。同时,文章还讨论了Intent的常用构造函数和数据传递的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 当作自己的笔记,参考引用了一些大神文章:

http://www.cnblogs.com/halzhang/archive/2010/05/28/1746592.html 

http://developer.android.com/reference/android/os/Bundle.html

   Intent简介:                                                                               

      在一个Android应用中,主要由四种组件组成(四种组件分别为:Activity、Broadcast、Service、ContentProvider),而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。在这些组件之间的通讯中,主要是由Intent协助完成的。

      Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

   Intent来实现Activity之间的跳转:                                           

   1.无数据的简单跳转   

通常在button的setOnClickListener中,通过构造一个新的intent实例,然后通过startActivity(Intent实例)来实现:

open.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(MainActivity.this, FileBrowser.class);
				startActivity(intent);
			}
		});

  为什么需要指定两个活动呢?因为在Android中有一个活动栈,这样的构造方式才能确保正确的将前一个活动压入栈中,才能在触发返回键的时候活动能够正确出栈。

   2.所有Activity都必须在AndroidManifest.xml中声明:   

<activity android:name="SecondActivity"></activity>

  

   3.Intent常用的构造函数:   

A.Intent(String action) 指定action类型的构造函数

B.Intent(String action, Uri uri) 指定Action类型和Uri的构造函数,URI主要是结合程序之间的数据共享ContentProvider

C.Intent(Context packageContext, Class<?> cls) 传入组件的构造函数(示例一中提到的Activity之间的转换)

D.Intent(String action, Uri uri, Context packageContext, Class<?> cls) 前两种结合体

Intent(String action, Uri uri)  的action就是对应在AndroidMainfest.xml中的action节点的name属性值。在Intent类中定义了很多的Action和Category常量。

  Intent intent = new Intent(Intent.ACTION_EDIT, null);
    startActivity(intent);

  该示例所使用的是构造函数B,Intent.ACTION_EDIT表示的是一个Action,执行此代码的时候,程序就会在AndroidManifest.xml中寻找相应的URI下所属的Activity;

<action android:name="android.intent.action.EDIT" />对应的Activity,如果对应为多个activity具有<action android:name="android.intent.action.EDIT" />此时就会弹出一个dailog选择Activity,如下图:

device 如果是用示例代码一那种方式进行发送则不会有这种情况。

   Activity之间数据的传递:                                                         

首先需要使用到的是Bundle

                   String path = file.getAbsolutePath();
			String name = file.getName();
			Intent intent = new Intent(FileBrowser.this,MainActivity.class);
			Bundle bundle=new Bundle();
		    bundle.putString("path",path );
		    bundle.putString("name", name);
		    intent.putExtras(bundle);       
		    startActivity(intent); 

首先,示例中创建了一个Intent的实例,用于转换Activity,同时,从该Activity中的变量获取了需要传递的数据;

其次是bundle.putXXX()方法的调用,向bundle中填充数据

voidputInt(String key, int value)
Inserts an int value into the mapping of this Bundle, replacing any existing value for the given key.
voidputIntArray(String key, int[] value)
Inserts an int array value into the mapping of this Bundle, replacing any existing value for the given key.
voidputLong(String key, long value)
Inserts a long value into the mapping of this Bundle, replacing any existing value for the given key.
voidputBoolean(String key, boolean value)
Inserts a Boolean value into the mapping of this Bundle, replacing any existing value for the given key.
voidputBooleanArray(String key, boolean[] value)
Inserts a boolean array value into the mapping of this Bundle, replacing any existing value for the given key.
voidputAll(Bundle map)
Inserts all mappings from the given Bundle into this Bundle.
voidputString(String key, String value)
Inserts a String value into the mapping of this Bundle, replacing any existing value for the given key.
voidputStringArray(String key, String[] value)
Inserts a String array value into the mapping of this Bundle, replacing any existing value for the given key.
voidputStringArrayList(String key, ArrayList<String> value)
Inserts an ArrayList value into the mapping of this Bundle, replacing any existing value for the given key.

然后调用intent.putExtras(bundle),将bundle绑定在intent上,最后startActivity();

   数据的接收:   

Bundle bd = intent.getExtras();
        String str_path = bd.getString("path");
        String str_name = bd.getString("name");
        text = (TextView)findViewById(R.id.tv_address);
        name = (TextView)findViewById(R.id.tv_name);
        text.setText(str_path);
        name.setText(str_name);

 

转载于:https://www.cnblogs.com/VortexPiggy/archive/2012/05/25/2509465.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值