Android使用Intent隐式实现页面跳转

在上一篇文章中我介绍了使用Intent显式来实现页面向下跳转,接下来这篇文章主要介绍的是使用Intent隐式来实现向上跳转,什么意思呢,就是当我们从第一个页面跳转到第二个页面的时候我们可以从第二个页面跳转回去.

通过查阅文档你会发现Activity中还有一个startActivityForResult()方法也是用于启动活动的,但是这个方法期望在活动销毁的时候能返回一个结果给上一个活动,毫无疑问这就是我们所要达到的效果.

startActivityForResult()方法接收2个参数,第一个参数还是Intent,第二个参数是请求码,用于回调中判断数据源的来源,我们可以在之前的代码中修改下如图

package com.example.testintent;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
  private Button bt;
  private TextView tv;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bt = (Button) findViewById(R.id.button1);
    bt.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        Intent intent = new Intent(MainActivity.this,FirstActivity.class);
        startActivity(intent);
      }
    });
    tv = (TextView) findViewById(R.id.text);
    bt = (Button) findViewById(R.id.button2);
    bt.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        Intent intent = new Intent(MainActivity.this,FirstActivity.class);
        /**
         * 第一个参数是Intent对象
         * 第二个参数是请求的一个标识
         */
        startActivityForResult(intent,1);
      }
    });
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode){
      case 1:
        if(resultCode == RESULT_OK){
          String returnData = data.getStringExtra("data_return");
          tv.setText("返回到第一个界面");
          Log.d("MainActivity",returnData);
        }
        break;
      default:
        break;
    }
  }
}

添加如下代码

Intent intent = new Intent(MainActivity.this,FirstActivity.class);
         startActivityForResult(intent,1);

这里使用了startActivityForRresult()方法来启动MainActivity,请求码只要是一个唯一值就可以了,接下来我们在FirstActivity中添加监听器就可以

package com.example.testintent;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class FirstActivity extends AppCompatActivity {
  private Button bt;
  @Override
  protected void onCreate( Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.first_layout);
    bt = (Button) findViewById(R.id.button);
    bt.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        Intent intent = new Intent();
        intent.putExtra("data_return","返回到第一个界面");
        setResult(RESULT_OK,intent);
        finish();
      }
    });
  }
}

这里需要介绍几个知识点

Intent中提供了一系列putExtra()方法的重载,可以把我们想要的数据暂存在Intent中,在这里putExtra()接收了2个参数,第一个参数是键,第二个参数是是我们真正要传递的数据..

接下来在看setResult()这个方法接收2个参数,第一个参数用于向上一个活动处理结果,一般只是用RESULT_OK或者RESULT_CANCELED两个值,第二个参数则把带有数据的Intent传递回去,然后调用finish()方法来销毁当前活动.

由于我们使用的startActivityForResult()方法启动FIrstActivity的,所以我们需要在FIrstActivity被销毁之后回调上一个活动的onACtivityResult()方法,因此我们需要在MainActivity中写这个方法来得到返回的数据

package com.example.testintent;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
  private Button bt;
  private TextView tv;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bt = (Button) findViewById(R.id.button1);
    bt.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        Intent intent = new Intent(MainActivity.this,FirstActivity.class);
        startActivity(intent);
      }
    });
    tv = (TextView) findViewById(R.id.text);
    bt = (Button) findViewById(R.id.button2);
    bt.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        Intent intent = new Intent(MainActivity.this,FirstActivity.class);
        /**
         * 第一个参数是Intent对象
         * 第二个参数是请求的一个标识
         */
        startActivityForResult(intent,1);
      }
    });
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode){
      case 1:
        if(resultCode == RESULT_OK){
          String returnData = data.getStringExtra("data_return");
          tv.setText("返回到第一个界面");
          Log.d("MainActivity",returnData);
        }
        break;
      default:
        break;
    }
  }
}

也就是这个方法

@Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode){
      case 1:
        if(resultCode == RESULT_OK){
          String returnData = data.getStringExtra("data_return");
          tv.setText("返回到第一个界面");
          Log.d("MainActivity",returnData);
        }
        break;
      default:
        break;
    }

onActivityResult()方法带有三个参数,第一个参数requestCode即在我们启动活动的时候传入的请求码,第二个参数resultCode是我们返回数据时传入的处理结果,第三个参数data是我们返回数据的Intent

然后我们点击运行如图

点击第二个按钮

在点击一下

我们想要的结果就实现了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android Intent实现页面跳转的两种方法

    本文实例为大家分享了Intent实现页面跳转的两种的方法,供大家参考,具体内容如下 下图中两个不同的方法就是两种页面之间跳转的情况 1).跳转不返回数据 2).跳转返回数据 实例: 第一种启动方式(跳转不返回数据) 第二种启动方式(跳转返回数据) 先看第一种: 点击第一种启动方式按钮会出现右边的图,然后再点击Button按钮返回左边的界面,TextView中的内容没变. 再看第二种启动方式 不同的是,点击Button按钮返回左边的界面,TextView中的内容变成了你好. 下面是所有代码 And

  • Android中Activity的四种启动模式和onNewIntent()

    写在前面 Activity是Android四大组件之一,用于直接跟用户进行交互,本篇文章将介绍Activity的启动流程.用户启动Activity的方式大致有两种:一种是在桌面点击应用程序的图标,进入应用程序的主界面:另一种是在应用程序中,进入一个新的Activity.前者,桌面其实是系统应用launcher的界面,点击应用程序图标,会进行应用程序的主界面,实质是从一个应用的Activity进入另一个应用Activity. 因此,不管是从桌面进入应用主界面,还是在应用里进入一个新的Activit

  • Android开发中Intent.Action各种常见的作用汇总

    本文介绍Android中Intent的各种常见作用. 1 Intent.ACTION_MAIN String: android.intent.action.MAIN 标识Activity为一个程序的开始.比较常用. Input:nothing Output:nothing <activity android:name=".Main" android:label="@string/app_name"> <intent-filter> <a

  • Android编程实现全局获取Context及使用Intent传递对象的方法详解

    本文实例讲述了Android编程实现全局获取Context及使用Intent传递对象的方法.分享给大家供大家参考,具体如下: 一.全局获取 Context Android 开发中很多地方需要用到 Context,比如弹出 Toast.启动活动.发送广播.操作数据库-- 由于很多操作都是在活动中进行的,而活动本身就是一个 Context 对象,所以获取 Context 并不是那么困难. 但是,当应用程序的架构逐渐开始复杂起来的时候,很多的逻辑代码都将脱离 Activity 类,由此在某些情况下,获

  • Android使用Intent显示实现页面跳转

    在学习安卓的最初过程中我们学的都是最基本的一个活动,只有一个活动的应用也太简单了吧,没错我们的最求应该更高点,不管你创建多少个活动,接下里我们介绍的这种方法能解决我们在创建活动之间的跳转. 使用显示Intent 刚入门学习Android的小伙伴们已经能很娴熟的使用Android studio 创建一个项目了,接下来我把我自己创建的目录先展示下 首先创建一个名叫TestIntent的project然后在main--java下面创建了2个类分别是FirstActivity和MainActivity,

  • Android Intent实现页面跳转的方法示例

    应朋友们反馈的Android基础薄弱的问题,决定出一套Android基础教程,帮助大家复习,巩固Android基础,今天要讲的是Android中的Intent实现Android间的页面跳转. 增加Acrivity页面时,首先需要在MainActivity中对页面注册,比如 新建被跳转的页面OtherActivity,其对应的xml文件如下 activity_other <?xml version="1.0" encoding="utf-8"?> <

  • Android开发中使用Intent打开第三方应用及验证可用性的方法详解

    本文实例讲述了Android开发中使用Intent打开第三方应用及验证可用性的方法.分享给大家供大家参考,具体如下: Android中提供了Intent机制来协助应用间的交互与通讯.可作为不同组件之间通讯的媒介完成应用之间的交互.这里讨论一下针对Intent打开第三方应用的相关操作. 本文主要记录: ① 使用 Intent 打开第三方应用或指定 Activity 的三种方式 ② 使用上面三种方式时分别如何判断该 Intent 能否被解析 ③ 判断该 Intent 能否被解析中可能出现的遗漏 基础

  • Android利用Intent.ACTION_SEND进行分享

    安卓系统本身可以很简便的实现分享功能,因为我们只需向startActivity传递一个ACTION_SEND的Intent,系统就为我们弹出一个应用程序列表.其实在系统的文件管理器中,这应该是我们常用的功能(包括文件的打开Intent.ACTION_VIEW). 下面列出一个简单的分享方式 Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent

  • Android使用Intent.ACTION_SEND分享图片和文字内容的示例代码

    本文讲述了Android版Intent.ACTION_SEND分享图片和文字内容.分享给大家供大家参考,具体如下: 编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! 下面的方法只能实现普通的文字分享: private void shareContent() { Intent share = new Intent(android.content.Intent

  • Android 基于IntentService的文件下载的示例代码

    文件下载这种事情是很耗时的.之前使用AsyncTask这样的异步类来做下载,然后切到后台就被干掉.所以打算试试Service.(不过按目前那些系统的尿性,其实Service也分分钟被干掉) 不过,这里并不是直接使用Service类,而是使用的是继承自Service的IntentService. 这个东西有三大好处: 1.他有个任务队列: 2.任务队列执行完后会自动停止: 3.他会起一个独立的线程,耗时操作不会影响你app的主线程. 这么自动化的东西简直省心. 话不多说,开始撸代码. 首先,要建个

随机推荐