startActivityForResult解析

startActivityForResult解析startActivity用于页面间的正常跳转。startActivityForResult用于页面间的跳转并回传数据,比如商城类的App下单时会有选择地址,选择之后地址更新。1.先用startActivityForResult方式启动一个页面 btn=(Button)findViewById(R.id.btn);btn.setOnClickListen

大家好,又见面了,我是你们的朋友全栈君。

startActivity用于页面间的正常跳转。

startActivityForResult用于页面间的跳转并回传数据,比如商城类的App下单时会有选择地址,选择之后地址更新。


1.先用startActivityForResult方式启动一个页面

btn=(Button)findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                //参数1是intent,参数2是requestCode 自定义
                startActivityForResult(intent,1);
            }
        });

requestCode 是自定义的请求码,必须大于等于0才行,这点源码有声明

startActivityForResult解析

2.第二个页面,只放了一个按钮,主要是事件

findViewById(R.id.second_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                intent = new Intent();
                intent.putExtra("SecondActivity", "返回的数据");
                //参数1是resultCode,参数2是intent 自定义
                setResult(2, intent);
                finish();
            }
        });

setResult方法必须在页面finish之前执行

startActivityForResult解析

startActivityForResult解析

从源码注释中可以看出resultCode一般是正常或者取消,正常就是选择地址并返回,取消的情况比如,用户选择地址的时候突然又不想选了或者点错了,然后直接返回,这种情况可以默认不处理,处理的话就在这个页面监听一下返回键

@Override
    public void onBackPressed() {
        setResult(3, intent);
        super.onBackPressed();
    }

注意,这个页面onClick事件中并没有startActivity或者startActivityForResult,而是直接finish掉,因为只有finish掉才会回调上个页面的onActivityResult方法

3.onActivityResult

/**
     * @param requestCode 请求码
     * @param resultCode 结果码
     * @param data 参数
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == 2) {//setResult中的标识码
            if (requestCode == 1) {//startActivityForResult中的标识码
                String mData = data.getStringExtra("SecondActivity");
                btn.setText(mData);
            }
        }else if(resultCode == 3){
            btn.setText("按返回键了");
        }
    }

完整代码:


MainActivity.java

package com.yechaoa.startactforresult;

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

public class MainActivity extends AppCompatActivity {

    private Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn=(Button)findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                //参数1是intent,参数2是requestCode 自定义
                startActivityForResult(intent,1);
            }
        });
    }

    /**
     * @param requestCode 请求码
     * @param resultCode 结果码
     * @param data 参数
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == 2) {//setResult中的标识码
            if (requestCode == 1) {//startActivityForResult中的标识码
                String mData = data.getStringExtra("SecondActivity");
                btn.setText(mData);
            }
        }else if(resultCode == 3){
            btn.setText("按返回键了");
        }
    }
}

SecondActivity.java

package com.yechaoa.startactforresult;

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

public class SecondActivity extends AppCompatActivity {

    private Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        findViewById(R.id.second_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                intent = new Intent();
                intent.putExtra("SecondActivity", "返回的数据");
                //参数1是resultCode,参数2是intent 自定义
                setResult(2, intent);
                finish();
            }
        });

    }

    @Override
    public void onBackPressed() {
        setResult(3, intent);
        super.onBackPressed();
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157504.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 手把手教你学DSP视频教程分享

    手把手教你学DSP视频教程分享手把手教你学DSP视频教程分享零基础入门,ccs软件环境搭建;硬件外设手把手调试;初学者入门必备;链接:https://pan.baidu.com/s/1y5ITVYF4h7kIwhDc3edu0Q提取码:2468

    2022年4月30日
    49
  • cmd中实现代码雨的命令。。。「建议收藏」

    cmd中实现代码雨的命令。。。「建议收藏」颜色修改时不能使用十六进制数@echoofftitledigitalraincolor0bsetlocalENABLEDELAYEDEXPANSIONfor/l%%iin(0)

    2022年8月5日
    7
  • DNS服务器列表

    DNS服务器列表PublicDNS+IPv4地址首选:119.29.29.29AliDNS 阿里公共DNSIPv4地址首选:223.5.5.5备用:223.6.6.6114DNS常规公共DNS(干净无劫持)首选:114.114.114.114、备选:114.114.115.115拦截钓鱼病毒木马网站(保护上网安全)首选:114.114.114.119、备用:114.11…

    2022年4月30日
    54
  • 安装LaTeX_如何正确使用

    安装LaTeX_如何正确使用使用优秀的LaTeX工具,让你写作事半功倍;MiKTex+TexStudio+JabRef

    2022年8月3日
    15
  • 汇编语言中AX寄存器(aoc32gx)

    目录1.上节回顾2.H2CSGDMA寄存器组2.1H2CSGDMA标识寄存器2.2H2CSGDMA描述符基地址寄存器2.3H2CSGDMA邻接描述符数量寄存器2.4H2CSGDMA描述符信用寄存器3.C2HSGDMA寄存器组4.下节内容1.上节回顾上节我们讲述了ConfigBlock寄存器组,我们今天来看H2CSGDMA/C2HSGDMA寄存器组,如下。H2CSGDMA/C2HSGDMA寄存器组主要是用来描述每个通道DMA描述符相关的一些

    2022年4月18日
    47
  • DSP优化——C6000[通俗易懂]

    DSP优化——C6000[通俗易懂]第一章C6000系列DSP的体系结构简介TI的C6000系列DSP内部采用的哈佛结构的体系结构,其数据段和代码段是分开存放的并且独立编址,减轻了程序在运行时的访问存储数据的瓶颈。其中C62和C64系列均为定点的DSP处理器,而C67系列为浮点的DSP,本文主要介绍C64系列的优化方法。C6455的功能模块图如下:图1:c6455的功能方框图C64系列DSP有两个数据通道,如下

    2022年6月16日
    124

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号