Activity切换及传递数据

概述

 使用Intent对象实现Activity切换及传递数据,Intent类在Intent.java中定义。

Activity切换发起方

创建Intent对象

Intent intent=new Intent(CurrentActivity.this,TargetActivity.class);

构造函数:

Intent(Context packageContext,Class<?> cls)

参数说明:
Context packageContext
packageContextContext类型的实例,用来指定发起切换Activity动作的Activity,即当前Activity。ActivityContext的间接子类,所以可以直接使用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);

startActivityActivity.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();
     }
 }

欢迎指正
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章