Android activity之间的跳转和数据传递

1、Activity之间的跳转 并且 传递数据

  A Activity进行的操作

        Intent intent = new Intent(context, B.class);
        intent.putExtra("tn",tn);
        intent.putExtra("payMode",payMode);
        context.startActivity(intent);

  B activity接收数据

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bundle extras = getIntent().getExtras();
        tnNumber = extras.getString("tn");
        payMode = extras.getString("payMode");

2、 startActivityForResult() 用法

  B activity等待C activity 的结果

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);
        Intent intent = new Intent(B.this,C.class);
        startActivityForResult(intent,10);

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        String A = data.getStringExtra("a");
        String B = data.getStringExtra("b");
        if(resultCode == 9){
            Log.d(TAG, "onActivityResult: "+A+" "+B);
        }
    }

  C activity 传递数据给 B

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_c);
        Intent mIntent = new Intent();
        mIntent.putExtra("a","nameA");
        mIntent.putExtra("b","nameB");
        this.setResult(9,mIntent);
    }

3、 上述的应用:

场景:

  接入银联支付时:  发起支付的页面必须 写一个 onActivityResult() 函数,接收支付的结果。 现在不想在 发起支付的页面 重写这个函数,而是要把它集成到SDK中,

我们需要做的是 设置一个中间 Activity去 发起支付。   A ------  C

  现在问题来了:  1、设置一个中间Activity 会有跳转的效果,用户会莫名的跳进一个 空白的 activity 再跳到支付页面。

          2、返回时会,需要按两次返回才能 返回原界面。

解决办法:

  发起 页面A , 中间页面 B , 支付页面 C

  1、B 设置注册时 设置  Activity为透明,这样跳转时就不会有闪屏的感觉。

    Android:theme="@android:style/Theme.Translucent"

  2、 在onActivityResult() 中完成相应操作时,调用 finish();

    就不需要再按一次 返回,才能退出中间Activity

问题完美解决。

另一思路,证明是错误的。

  在 B 中 发起完成 支付后 ,直接调用 finish();  这样跳转页面时不用跳到空白页,而且从支付页面返回时也不需要调用两次。

但是 B中的onActivityResult() 方法就不会被调用。

4、Activity 中finish() 和 onDestroy()方法的区别:

  Activity.finish() 

    Call this when your activity is done and should be closed.

      在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。当你调用此方法的时候,系统只是将最上面的Activity移出了栈,

并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会再找到这个ActivityActivity.

  onDestory()

  the system is temporarily destroying this instance of the activity to save space.

  系统销毁了这个Activity的实例在内存中占据的空间。在Activity的生命周期中,onDestory()方法是他生命的最后一步,资源空间等就被回收了。

当重新进入此Activity的时候,必须重新创建,执行onCreate()方法。?

5、通过定义一个ActivityCollecter 类来管理 开启的活动

package com.example.activitytest;

import android.app.Activity;

import java.util.ArrayList;
import java.util.List;

public class ActivityCollector {

    public static List<Activity> activities = new ArrayList<>();

    public static void addActivity(Activity activity) {
        activities.add(activity);
    }

    public static void removeActivity(Activity activity) {
        activities.remove(activity);
    }

    public static void finishAll() {
        for (Activity activity : activities) {
            if (!activity.isFinishing()) {
                activity.finish();
            }
        }
    }

}

在每个Activity 创建的时候增加:

ActivityCollector.addActivity(this);

当在最后一个Activity中调用如下,activity会被清空

 ActivityCollector.finishAll();
 android.os.Process.killProcess(android.os.Process.myPid());

活动生命周期:

  http://www.cnblogs.com/NeilZhang/p/6898140.html

github 地址:

  [email protected]:lsfzlj/AndroidTestProject.git

时间: 2024-10-29 05:18:30

Android activity之间的跳转和数据传递的相关文章

Android Day06四大组件之Activity多页面跳转和数据传递

1.什么是Activity   官方文档是这么说的:An Activity is an application component that provides a screen     with which users can interact in order to do something, such as dial the phone,     take a photo, send an email, or view a map. Each activity is given a wind

Android Activity之间的跳转

Activity之间的跳转需要用到Intent(意图)组件,通过Intent可以开启新的Activity实现界面跳转功能. Intent被称为意图,是程序中各组件进行交互的一种重要方式,它不仅可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传递.根据开启目标组件的方式不同,Intent被分为显式意图和隐式意图两种类型. 显式意图: 显式意图可以直接通过名称开启指定的目标组件,通过其构造方法Intent(Context packageContext , Class<?> cls)来实现

实现android activity之间的跳转

android程序一般不会只有一个activity,会碰到activity之间的跳转.以下是使用Intent做应用程序内部的activity做跳转.比如,应用程序第一个activity是: 点击“下一步”按钮后: 这需要写两个Activity类.第一个是:MainActivity 1 package com.easymorse; 2 3 import android.app.Activity; 4 import android.content.Intent; 5 import android.o

Android应用开发-页面跳转与数据传递(重制版)

Android四大组件:Activity,Service,Broadcast Receiver,Content Provider 创建Activity 定义Java类,继承Activity类 在清单文件中配置activity标签 activity标签下如果带有下面这部分代码,则会在系统中多创建一个快捷图标 <intent-filter> <action android:name="android.intent.action.MAIN" /> <catego

iOS开发拓展篇—应用之间的跳转和数据传递

iOS开发拓展篇—应用之间的跳转和数据传 说明:本文介绍app如何打开另一个app,并且传递数据. 一.简单说明 新建两个应用,分别为应用A和应用B. 实现要求:在appA的页面中点击对应的按钮,能够打开appB这个应用. 1.新建两个应用,分别为A和B.     2.设置应用B的url. 3.在应用A中编写打开app的代码 点击之后,会跳转到新的控制器. 注意:打开应用B的过程中,B有两种状态. 第一种状态:B并没有启动,那么会启动B.并调用下面的方法. 第二种状态:此时B已经启动了,但是在后

Activity间的跳转和数据传递

Button bt; EditText et; TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.sendimpl); bt=(Button) findViewById(R.id.mybut); et=(Ed

杂记之activity之间的跳转

代码结构图 manifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.com.chenzheng_java" android:versionCode="1" android:versi

Android页面跳转和数据传递

Android应用开发-页面跳转和数据传递 Activity Android四大组件之一 可以理解为Android中的界面,每一个界面都是一个Activity Activity的使用必须在清单文件中进行配置 在清单文件中, 创建第二个Activity 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 <intent-filter> <action android:name="android.intent.action.M

Android笔记(二十) Activity中的跳转和值传递

我们知道,一个APP是由若干个Activity组成的,那么各个Acitivity中肯定需要进行跳转以及传递数值以保证App的运行,现总结一下多个Activity之间的跳转和值传递. 简单的跳转 AndroidManiFest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/andro