前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >速读原著-Android应用开发入门教程(屏幕间的跳转和事件的传递)

速读原著-Android应用开发入门教程(屏幕间的跳转和事件的传递)

作者头像
cwl_java
发布2020-01-15 10:36:46
8230
发布2020-01-15 10:36:46
举报
文章被收录于专栏:cwl_Javacwl_Java

6.4 屏幕间的跳转和事件的传递

在一般情况下,Android 的每一个屏幕基本上就是一个活动(Activity),屏幕之间的切换实际上就是在活动间互相调用的过程,Android 使用 Intent 完成这个动作。

Android 屏幕跳转的关系和方式如下图所示:

在这里插入图片描述
在这里插入图片描述

事实上,在 Android 中,屏幕使用一个活动来实现,屏幕之间是相互独立的,屏幕之间的跳转关系通过 Intent来实现。

6.4.1.跳转的方法

本示例是一个简单的屏幕之间的跳转,从一个屏幕跳转到另一个屏幕,在启动第二个屏幕后,前一个屏幕消失。参考示例程序:Forward(ApiDemo => App=>Activity=>Forward)

源代码:

代码语言:javascript
复制
com/example/android/apis/app/Forward.java 
com/example/android/apis/app/ForwardTarget.java 

布局资源代码:forward_target.xmlforwarding.xml 本示例包含了两个活动,在 UI 上它们就是两个屏幕,分别为跳转的源和目的,因此在 AndroidManifest.xml 中分别定义。

代码语言:javascript
复制
<activity android:name=".app.Forwarding" 
 android:label="@string/activity_forward ding"> 
 <intent-filter>
 <action android:name="android.intent.action.MAIN" /> 
 <category android:name="android.intent.category.SAMPLE_CODE" /> 
 </intent-filter> 
 </activity> 
 <activity android:name=".app.ForwardTarget"> </activity>

两个活动的名称分别为 Forwarding 和 ForwardTarget,由于第二个活动没有 intent-filter,因此在程序中只能由第一个活动来启动。

Forward 程序的运行结果如图所示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

点击“Go”按钮从 Forward 跳转到 ForwardTarget,这个内容在 Java 源文件 Forward.java 的以下片段中处理:

代码语言:javascript
复制
public void onClick(View v) 
{ 
 Intent intent = new Intent(); // 建立 Intent 
 intent.setClass(Forwarding.this, ForwardTarget.class); // 设置活动
 startActivity(intent); 
 finish(); // 结束当前活动
}

启动第二个活动需要使用 Intent,在其 setClass()函数中设置源和返回的内容,Intent 是 android.content 包中的类,用于启动活动、服务或者消息接收器。

这里使用的 Intent 的 setClass()的方法的原型如下所示:

代码语言:javascript
复制
Intent setClass(Context packageContext, Class<?> cls)

第一个参数是当前的上下文类型 Context,因此把当前的活动设置过去即可(Activity 本身继承了 Context),第二个是 Intent 所包含的 JAVA 类,直接设置 ForwardTarget.class 类即可。

本例中使用了 finish()函数表示当前的活动结束,这样在第二个活动(ForwardTarget)启动时,第一个活动(Forward)已经不存在了。如果没有调用 finish()函数,第二个活动启动时,第一个活动就处于 OnPause 状态,当第二个活动退出后,第一个活动重新出现,也就是会调用活动的 onResume()函数。

6.4.2.带有返回值的跳转

在某些时候,从跳转的对象返回时,跳转源头需要得到其返回的结果,这样两个屏幕才可实现一些交互。

参考示例程序:ReceiveResult(ApiDemo => App=>Activity=>ReceiveResult) 源代码:com/example/android/apis/app/ReceiveResult.java

布局资源代码:receive_result.xml 和 send_result.xml

代码语言:javascript
复制
<activity android:name=".app.ReceiveResult" 
 android:label="@string/activity_receive_result"> 
 <intent-filter> 
 <action android:name="android.intent.action.MAIN" /> 
 <category android:name="android.intent.category.SAMPLE_CODE" /> 
 </intent-filter> 
</activity> 
<activity android:name=".app.SendResult"> </activity>

ReceiveResult 程序的运行结果如图所示:

在这里插入图片描述
在这里插入图片描述

初始化界面如图所示,点击“Get Result”按钮将跳转到第二个屏幕,如中图所示;在第二个屏幕中点击“Corky”和“Violet”按钮将返回第一个屏幕,并获得对应显示,如右图所示。

Java 源文件 ReceiveResult.java 的代码片段如下所示:

代码语言:javascript
复制
static final private int GET_CODE = 0; 
 private OnClickListener mGetListener = new OnClickListener() { 
 public void onClick(View v) { 
 Intent intent = new Intent(ReceiveResult.this, SendResult.class); 
 startActivityForResult (intent, GET_CODE); 
 } 
};

这里调用的是 startActivityForResult()方法,设置一个 GET_CODE 为请求代码,这样可以获得目标活动的返回信息。这个函数的原型为:

代码语言:javascript
复制
public void startActivityForResult (Intent intent, int requestCode)

被跳转的目标的 Java 源文件 SendResult.java 的代码片段如下所示:

代码语言:javascript
复制
    private OnClickListener mCorkyListener = new OnClickListener() {
        public void onClick(View v) {
            setResult(RESULT_OK, (new Intent()).setAction("Corky!"));
            finish();
        }
    };
    private OnClickListener mVioletListener = new OnClickListener() {
        public void onClick(View v) {
            setResult(RESULT_OK, (new Intent()).setAction("Violet!"));
            finish();
        }
    };

被跳转的目标程序将返回值返回,这里使用的依然是 Intent 作为交互的信息,通过 setAction()设置不同的活动。

由于被跳转的目标程序,是被显示 Intent 调用起来的。因此,返回后继续由 ReceiveResult.java 对返回值进行处理。返回的信息通过扩展 Activity 的 onActivityResult()函数来实现,两个整数类型的参数 requestCode 和 resultCode分别代表请求代码和结果码,第三个参数 Intent(类型 data)表示活动间交互附加的数据信息。

代码语言:javascript
复制
    @Override
    protected void onActivityResult(int requestCode, int resultCode,
                                    Intent data) {
        if (requestCode == GET_CODE) {
            Editable text = (Editable)mResults.getText();
            if (resultCode == RESULT_CANCELED) {
                text.append("(cancelled)");
            } else {
                text.append("(okay ");
                text.append(Integer.toString(resultCode));
                text.append(") ");
                if (data != null) {
                    text.append(data.getAction());
                }
            }
            text.append("\n");
        }
    }

这里 onActivityResult()是一个被继承的函数,其参数 data 就是这个活动作为返回值接受到,data.getAction()可以从返回的 Intent 中取回内容。

这里的参数 requestCode 也是根据当时的在调用 startActivityForResult()的时候指定的返回值。Android 中使用 Intent 并使用 startActivity()和 startActivityForResult()调用一个新的活动,实现屏幕的跳转功能,

调用者可以获得跳转对象的返回信息。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 6.4 屏幕间的跳转和事件的传递
    • 6.4.1.跳转的方法
      • 6.4.2.带有返回值的跳转
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档