Activity忠实的信使---Intent

Intent可以理解为“意图的抽象”、使用Intent可在多个Activity之间传递数据,充当信使,有2个重要属性action和data,有2个常用的方法putExtra()---存储数据、getXXXExtra()---取出数据(XXX为存储的数据类型),举个例子,使用Intent在2个Activity之间传递信息,话不多说,先上图

第一个Activity程序ActivityMain.java

public class ActivityMain extends Activity {
    /** Called when the activity is first created. */
	static final int REQUEST_CODE = 1; 
    
    public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button button1 = (Button) findViewById(R.id.button1);
		button1.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				//创建Intent对象,参数分别为上下文,要跳转的Activity类
				Intent intent1 = new Intent(ActivityMain.this, ActivitySub.class);
				intent1.putExtra("activitymain", "从‘ActivityMain‘进入");//放入需要传递的数据(键值对)
				//启动intent1对象,实现跳转。如果REQUEST_CODE>=0,就会调用onActivityResult()
				startActivityForResult(intent1, REQUEST_CODE);				  
			   }
			});
		setTitle("首次进入‘ActivityMain‘页面!");
	}  
    @Override
     //requesCode用于标识对应于哪一个子模块,resultCode用于标识了子模块中哪一个intent携带的数据  
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (requestCode == REQUEST_CODE) {
			if (resultCode == RESULT_CANCELED)
				setTitle("取消");
			else if (resultCode == RESULT_OK) {
				String temp=null;
				//不需要声明新的Intent对象,直接用data就可以,这里的data是AcitivitySub传递过来的
				//保存状态信息的方法有SharedPreferences对象和Bundle对象
				 Bundle extras = data.getExtras();  
			        if (extras != null) {
			        	temp = extras.getString("activitysub");
			        }
				setTitle("现在是在ActivityMain里:"+temp);
			}
		}
	}
}

启动Activity的2种方式startActivityForResult()与startActivity()的不同之处在于:

1、startActivity( )

仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startActivity( )。

2、startActivityForResult( )

可以一次性完成这项任务,当程序执行到这段代码的时候,假若从ActivityMain跳转到下一个ActivitySub,而当这个ActivitySub调用了finish()方法以后,程序会自动跳转回ActivityMain,并调用前一个ActivityMain中的onActivityResult( )方法。

第二个Activity程序ActivitySub.java

public class ActivitySub extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.subactivity);      
		Button button1 = (Button) findViewById(R.id.button2);
		button1.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Bundle bundle = new Bundle();
				bundle.putString("activitysub", "自‘ActivitySub‘返回");
				Intent intent2 = new Intent();
				intent2.putExtras(bundle);
				setResult(RESULT_OK, intent2);//RESULT_OK用于标识此intent2
				finish();
			}
		});
		String data=null;
		//getIntent将该项目中包含的原始intent检索出来,将检索出来的intent赋值给一个Intent类型的变量  
		//getExtras()得到被赋值的变量所附带的额外数据
		 Bundle extras = getIntent().getExtras();//获得全部数据
	        if (extras != null) {
	        	 //getString()返回指定key的值 
	             data = extras.getString("activitymain");
	        }
		setTitle("现在是在‘ActivitySub‘里: "+data);
    }
}

布局文件中main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
	<Button android:id="@+id/button1"    	  
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" 
		android:text="进入ActivitySub" />

</LinearLayout>

subactivity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" 
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">

	<Button android:id="@+id/button2"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" 
		android:text="返回ActivityMain" />

</LinearLayout>

需要解释的注释都已给出

时间: 2024-10-25 22:28:23

Activity忠实的信使---Intent的相关文章

Android组件之间的信使——Intent

从一个Activity启动到另一个Activity可以使用startActivity()方法或者是startActivityForResult()方法 第一种:直接启动一个ActivityIntent intent = new Intent(Main.this, SecondActivity.class);startActivity(intent); 第二种:启动另一个Activity并返回结果作用:当从第二个Activity回跳到前一个Activity的时候,就不再需要使用startActiv

Activity之间的信使--Bundle

两个Activity之间的传参的具体做法如下: 1.新建一个Bundle类 Bundle bundle=new Bundle(); 2.向Bundle类中放入数据(类似于map) bundle.putString("key" ," value"); 3.新建一个intent对象,并将该bundle加入到这个intent对象 Intent intent=new Intent( ); intent.putExtras(bundle); 4.在另一个activity中通过

Android开发之bug-No Activity found to handle Intent

android.content.ActivityNotFoundException: No Activity found to handle Intent 做Android开发中,使用隐式intent,Manifest中设置了action和category, 如下: <activity android:name="exerciseintent.ExIntent2_1"> <intent-filter > <action android:name="

Android关于No Activity found to handle Intent的问题

Android有两种Intent, 显式和隐式. 显式的Intent,即在构造Intent对象时就指定接收者: 隐式的Intent,即Intent的发送者在构造Intent对象时, 并不知道也不关心接收者是谁,有利于降低发送者和接收者之间的耦合. 对于显式Intent,Android不需要去做解析,因为目标组件已经很明确, 隐式Intent通过需要Android解析,将Intent映射给可以处理此Intent的Activity.IntentReceiver或Service. Intent解析机制

Android 使用系统的Activity播放音频文件 intent

Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File("/sdcard/record.wav")), "audio"); startActivity(intent); 这里可以播放wav.amr.MP3等

Activity启动模式 及 Intent Flags 与 栈 的关联分析

   在学习Android的过程中,Intent是我们最常用Android用于进程内或进程间通信的机制,其底层的通信是以Binder机制实现的,在物理层则是通过共享内存的方式实现的.     Intent主要用于2种情景下:(1)发起意图  (2)广播     它的属性有:ComponentName,action,data,category,extras,flags等,通常情况下,进行Intent的匹配涉及到3个属性:Action,Data,Category.这些东西都需要了解才能对它有个深入的

Android基础知识:Day06 Activity生命周期和Intent用法

Day06 Activity生命周期和Intent用法 一.Activity的跳转 1. 创建第二个Activity 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.cate

【转】Activity启动模式 及 Intent Flags 与 栈 的关联分析

http://blog.csdn.net/vipzjyno1/article/details/25463457    在学习Android的过程中,Intent是我们最常用Android用于进程内或进程间通信的机制,其底层的通信是以Binder机制实现的,在物理层则是通过共享内存的方式实现的.     Intent主要用于2种情景下:(1)发起意图  (2)广播     它的属性有:ComponentName,action,data,category,extras,flags等,通常情况下,进行

Activity启动模式及Intent的Flag属性对Intent传值的影响

前些时候在支援公司其它部门项目开发的时候,有同事问我:通过Intent在Activity之间进行数据传递,传递的Key和获取的Key都没错,为什么在目标Activity会获取不到传递过来的数据?在Key没错的情况下获取不到数据,那么无疑是Activity的启动模式及在跳转时给Intent设置的Flag属性引起的,于是乎有了今天这篇博客. 原因一:Activity的启动模式 那么Activity以哪种启动模式进行跳转时,会导致目标Activity获取不到传递过来的数据呢?在上一篇Activity启