目录
概述
使用Intent对象实现Activity切换及传递数据,Intent
类在Intent.java
中定义。
Activity切换发起方
创建Intent对象
Intent intent=new Intent(CurrentActivity.this,TargetActivity.class);
构造函数:
Intent(Context packageContext,Class<?> cls)
参数说明:
Context packageContext
packageContext
是Context
类型的实例,用来指定发起切换Activity动作的Activity,即当前Activity。Activity
是Context
的间接子类,所以可以直接使用this
关键字指向当前Activity。
注意不能想当然地使用this
关键字去指代,因为很多时候会在 内部类(Inner Class)或其它类中创建Intent
对象,而this
关键字指向当前层次类,这时候就需要使用CurrentActivity.this
用法指代。
Class<?> cls
这个参数是一个自动适配类型参数的泛型类Class<?>
,作用是指定将要跳转的目标Acticity,对于写代码而言,这个参数是一个完整的Activity类文件的文件名(即包含后缀.class
),比如要从CurrentActivity跳转至TargetActivity,这个参数就应该是TargetActivity.class
.
也可以使用如下方式指定跳转指向:
Intent intent=new Intent();
intent.setClass(this,TargetActivity.class);
setClass()
的定义:
public Intent setClass(Context packageContext,Class<?> cls)
这种方式与上等价。
提要:
创建Intent
对象的过程使用构造函数Intent( )
创建了一个Activity跳转指向
:当前Activity JumpTo 目标Activity,这两个Activity分别对应构造函数Intent( )
的两个参数
Intent对象发送数据
intent.putExtra("DataName",type param);
putExtra( )
有很多版本,例如针对基本类型的:
public Intent putExtra(String name,boolean value);
public Intent putExtra(String name,int value);
public Intent putExtra(String name,double value);
...
参数说明:
String name
该参数是被传递数据的名称,是一个字符串,也称数据的键(Key)
,目标Activity通过数据的键
接收指定的数据。
第二个参数即实际数据,也称数据的值
。
可以使用多个putExtra()
方法向目标传递多个数据。
注意:Android API文档对putExtra()
的解释为:Add extended data to the intent. The name must include a package prefix, for example the app com.android.contacts would use names like "com.android.contacts.ShowAll".name String: The name of the extra data, with package prefix.value: The data value.
在同一个包中传递数据时,可以简化数据的键。
启动目标Activity
startActivity(intent);
startActivity
在Activity.java
中的定义:
public void startActivity(Intent intent)
这个方法在所有操作都完成后调用,传入之前创建的Intent
对象即可,此方法调用后则切换至目标Activity。
完整的切换Activity发起方代码
CurrentActivity.java
import ...
public class CurrentActivity extends Activity
implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//load currentActivity.xml
setContentView(R.layout.currentActivity);
Button btn_1=(Button)findviewByID(R.id.btn_1);
btn_1.setOnClickListener(this);
}
@Override
public void onClick(View v){
Intent intent=new Intent(this,TargetActivity.class);
intent.putExtra("data_1","HelloWorld"); //putExtra String
intent.putExtra("data_2",100); //putExtra int
intent.putExtra("data_3",3.14); //putExtra double
startActivity(intent); //TargetActivity launch
}
}
Activity切换目标方
获取Intent对象
Intent intent=getIntent();
getIntent( )
方法返回一个Intent对象用以切换Activity目标方接收数据,通过此对象可以得到传递来的数据。
getIntent( )
在Intent.java
中的定义为:
public Intent getIntent();
注意:Android API文档中对getIntent()
的解释为:Return the intent that started this activity.
即调用此方法将返回开启当前activity的intent对象。对于本例而言,返回的即为CurrentActivity.java
中创建的intent。
获取数据
String Data=intent.getStringExtra("hello");
参数说明:
该方法的定义为:
public String getStringExtra(String name)
其中String name
就是之前提到的数据的键(Key)
,对于基本类型数据,还有getXXXExtra( )
方法如:
public boolean getBooleanExtra(String name);
public int getIntExtra(String name);
public double getDoubleExtra(String name);
...
完整的切换Activity目标方代码
TargetActivity.java
import ...
public class TargetActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//load targetActivity.xml
setContentView(R.layout.targetAvtivity);
Intent intent=getIntent(); //Get Intent object
//Get String
String Data_1=intent.getStringExtra("data_1");
//Get int
String Data_2=Integer.toString(intent.getIntExtra("data_2"));
//Get double
String Data_3=Double.toString(intent.getDoubleExtra("data_3"));
Toast.makeText(this,Data_1,LENGTH_SHORT).show();
Toast.makeText(this,Data_2,LENGTH_SHORT).show();
Toast.makeText(this,Data_3,LENGTH_SHORT).show();
}
}
欢迎指正