04 Activity窗口间的切换及参数的传递

原创 2017年09月24日 18:20:33

在Android系统里,App间的通信和一个App内的Activity间的通信都是由Intent类对象来完成的. Android是一个高度中央集权制管理的系统, 基本上所有的操作都是向系统发出请求,由系统来完成的. 这种向系统的请求操作就是由Intent来实现.

Intent负责描述向系统请求操作的具体行为,涉及的参数及附带的数据等信息, Android系统根据Intent的描述信息作相应的操作。

Intent功能比较复杂, 其中用于Activity启动有两种方式:
1 显式启动的方式,即在创建Intent对象时,指定由当前的对象和要用于创建出对象的类. 然后用startActivity(Intent对象)来启动, 并可以启动前可用Intent的putExtras(..)设置要传递的参数

2 隐式启动的方式。 显式在启动时需要具体指定哪个类对象, 隐式启动只需指定一种系统操作, 至于这操体具体是由哪个类对象完成,这个不是由程序指定而是由系统及用户决定.
如实现需要打开www.baidu.com的页面, 至于使用哪个浏览器由系统决定:

  Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com"));
  startActivity(intent);


用显式启动的方式实现两个Activity窗口跳转,并传递参数:
1 MyActivity窗口作主窗口,窗口只有一个按钮”START OTHERACTIVITY”, 点击按钮后出现另一个窗口OtherActivity窗口。 在OtherActivity窗口上只有一个TextView,显示”this is other activity”及显示从主窗口接收到的参数

2 主窗口创建Intent对象,并在创建时指定使用当前窗口对象创建出OtherActivity窗口, 并在启动窗口前设置传送字符串参数。

       Intent intent = new Intent(MyActivity.this, OtherActivity.class);
       intent.putExtra("what", "hello others"); //"what"是用于区分参数内容的关键字,接收时使用此关键接收相应的参数值

       startActivity(intent); //根据Intent描述信息启动窗口

3 在OtherActivity窗口里获取参数值:

String str = this.getIntent().getStringExtra("what");

完整代码:

/* MyActivity.java */
package com.example.jk.a01hello;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;


public class MyActivity extends Activity {
    private Button btn;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); //调用父类的功能

        LinearLayout hlayout;

        hlayout = new LinearLayout(this);
        hlayout.setOrientation(LinearLayout.HORIZONTAL);

         btn = new Button(this);
         btn.setText("start OtherActivity");

         hlayout.addView(btn);
         setContentView(hlayout);

         btn.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
                 Intent intent = new Intent(MyActivity.this, OtherActivity.class);
                 intent.putExtra("what", "hello others"); //"what"是用于区分参数内容的关键字,接收时使用此关键接收相应的参数值

                 startActivity(intent);

             }
         });
    }
}
/* OtherActivity.java */
package com.example.jk.a01hello;

import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;


public class OtherActivity extends Activity {
    private TextView  label;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        String str = this.getIntent().getStringExtra("what");

        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);

        label = new TextView(this);
        label.setText("this is other activity : " + str);

        layout.addView(label);
        setContentView(layout);
    }

}

同时需要修改AndroidManifest.xml文件,声明两个Activity:

        <activity android:name=".MyActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".OtherActivity">

        </activity>




如需实现主窗口接收OtherActivity窗口的返回结果时,基于上面例子的更改:
MyActivity:
1 用startActivityForResult(intent, int requestCode)来启动Intent, requestCode用于区分接收多个启动窗口的返回结果

2 实现抽像函数void onActivityResult(int requestCode, int resultCode, Intent data), 当有启动窗口的返回结果时会自动触发此函数, 通过参数就可以得到具体的返回值

OtherActivity:
只要在窗口关闭前用setResult设置返回值即可


基于上面的例子修改,OtherActivity增加一个按钮, 点击按钮时设置返回结果,并关闭窗口.

/* MyActivity.java */
package com.example.jk.a01hello;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;


public class MyActivity extends Activity {
    private Button btn;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); //调用父类的功能

        LinearLayout hlayout;

        hlayout = new LinearLayout(this);
        hlayout.setOrientation(LinearLayout.HORIZONTAL);

         btn = new Button(this);
         btn.setText("start OtherActivity");

         hlayout.addView(btn);
         setContentView(hlayout);

         btn.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
                 Intent intent = new Intent(MyActivity.this, OtherActivity.class);
                 intent.putExtra("what", "hello others"); //"what"是用于区分参数内容的关键字,接收时使用此关键接收相应的参数值

                 startActivityForResult(intent, 77); // 77 为request_code
             }
         });
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
            System.out.printf("requestCode:%d, resultCode:%d, data=%s\n", requestCode, resultCode, data.getStringExtra("return"));
    }
}
/* OtherActivity.java */
package com.example.jk.a01hello;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;


public class OtherActivity extends Activity {
    private TextView  label;
    private Button btn;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        String str = this.getIntent().getStringExtra("what");

        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);

        label = new TextView(this);
        label.setText("this is other activity : " + str);

        btn = new Button(this);
        btn.setText("close");
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setResult(RESULT_OK, new Intent().putExtra("return", "returning string"));
                finish();
            }
        });

        layout.addView(label);
        layout.addView(btn);
        setContentView(layout);
    }

}
版权声明:本文为博主原创文章,未经博主允许转载。

Android6.0 WMS(九) WMS切换Activity窗口(App Transition)的过程分析

在Android系统中,同一时刻只有一个Activity组件是处于激活状态的,因此,当ActivityManagerService服务激活了一个新的Activity组件时,它就需要通知WindowMa...

android--Activity窗口切换(左右滑动)

实现Activity窗口的动画切换效果,android2.0增加了一个方法 public void overridePendingTransition (int enterAnim, int e...

【边做项目边学Android】手机安全卫士04_01:界面(Activity)之间的切换,Activity和任务栈

上一回说到,用户选择是否升级,若用户选择不升级,那么就要进入程序的主界面。下面要做的是从splash界面跳转到main界面。 MainActivity创建 1.首先新建MainActivity: ...
  • bruce_6
  • bruce_6
  • 2014年09月29日 13:38
  • 2090

第二十九节:数码管通过切换窗口来设置参数,并且不显示为0的高位。

第二十九节:数码管通过切换窗口来设置参数,并且不显示为0的高位。 开场白: 上一节在第4,3,2,1位显示设置的参数时,还有一点小瑕疵。比如设置参数等于56时,实际显示的是“0056”,也就是...

Activity切换(带参数)

关于Activity在这里我只谈携带参数的切换。在带参数的Activity切换的时候主要有以下三个函数: startActivityForResult(Intent,requestCode)...

Activity切换示例代码,intent传递

  • 2012年05月25日 09:25
  • 145KB
  • 下载

老粗ios学习笔记(2)-ui开发 窗口间传递参数

#import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate @synthesize myN...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:04 Activity窗口间的切换及参数的传递
举报原因:
原因补充:

(最多只允许输入30个字)