Android——Intent在Activity的使用详解-中(显式 Intent与实现Activity之间的数据互传)(含源码下载)

显式 Intent 是指在创建 Intent 对象时,就指定接收者,因为我们已经知道要启动的 Activity 名称。这里将以Activity 为例介绍如何使用显式 Intent。在启动 Activity 时必须在 Intent 中指明要启动的 Activity 所在的类。通常情况下,在一个Android 项目中,如果只有一个 Activity,那么只需要在 AndroidManifest.xml 文件中配置,并且将其设置为程序的入口。这样,当运行该项目时,将自动启动该 Activity。否则,需要应用 Intent 和startActivity() 方法来启动需要的 Activity,即通过显式 Intent 来启动。

Intent显示大致有四种。我们以A_Activity为启动入口,B_Activity为要跳转的activity,具体如下:

第1种:

//Intent显示跳转1                                                                        
Intent intent = new Intent(A_Activity.this,B_Activity.class);
startActivity(intent);                                                                                                    

第2种:

//Intent显示跳转2
Intent intent = new Intent();
intent.setClass(A_Activity.this,B_Activity.class);
startActivity(intent);

第3种

//显示跳转3
Intent intent = new Intent();
intent.setClassName(A_Activity.this
,"com.example.mydemo.B_Activity");
startActivity(intent);

第4种

//显示跳转4
Intent intent = new Intent();
ComponentName cn = new ComponentName(A_Activity.this,
 					"com.example.mydemo.B_Activity");
intent.setComponent(cn);
startActivity(intent);

以上四种我们不必全部掌握。其中1,2种类似,3,4种类似,掌握其中2种即可。通常情况下我们会选择第一种返回来实现Intent显示跳转,这一种我们必须掌握。

除了了解如何跳转以外,对于一个app,在从一个activity跳转到另一个activity是有可能会携带数据、信息等传递到目标activity。所以我还要讲解以下如何使用Intent带参数到目标activity并在目标activity实现接收。
1.首先我们要在当前activity实现以下内容:

Intent intent = new Intent(A_Activity.this,B_Activity.class);
Bundle bundle = new Bundle();
bundle.putString("MESSAGE","hello world !");
bundle.putInt("NUM",1);
intent.putExtras(bundle);
startActivity(intent);

从上面的代码我们可以看到我们创建了一个Bundle对象并且实例化了,bundle对象通过键值的形式保存数据和Java中的map机制类似。
然后通过intent.putExtras(bundle)将所有要传输的数据依附到intent实例里,然后startActivity(intent)开始界面跳转。

2.在目标界面接收数据:
接收数据非常简单一条代码就可以搞定,如下:

Bundle bundle = getIntent().getExtras();

然后我们就可以通过键值愉快地提取传递的数据了:

String message = bundle.getString("MESSAGE");
int num = bundle.getInt("NUM");

那如果我们要在从A_Activity跳转到B_Activity然后从B_Activity在返回回来同时也传递一些数据给A_Activity,如何实现呢???
这里我们可以通过引入以下3个函数实现:

startActivityForResult(Intent intent, int requestCode) 
onActivityResult(int requestCode, int resultCode, Intent data) 
setResult(int resultCode, Intent data)

下面通过实例进行演示:

(1)在A_Activity实现以下代码:

private final static int REQUEST_CODE_0 = 0;

Intent intent = new Intent(A_Activity.this,B_Activity.class);
Bundle bundle = new Bundle();
bundle.putString("MESSAGE","hello world !");
bundle.putInt("NUM",1);
intent.putExtras(bundle);
startActivityForResult(intent,REQUEST_CODE_0);

重写onActivityResult(……)

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (REQUEST_CODE_0 == requestCode) {
            String result = data.getStringExtra("RESULT");
        }

    }

(2)如果我们是想实现在返回B_Activity时传递数据给A_Activity,可以在onPause(……)里面实现,代码如下:

@Override
    protected void onPause() {
        super.onPause();
        Intent intent = new Intent();
        intent.putExtra("RESULT","回传数据……");

        setResult(Activity.RESULT_OK,intent);
    }

链接:百度网盘下载 提取码:7vnk

推荐阅读:
Android——Intent在Activity的使用详解-上(Intent简介)

发布了17 篇原创文章 · 获赞 5 · 访问量 6950

猜你喜欢

转载自blog.csdn.net/qq_43567345/article/details/104346153
今日推荐