Activity的三种跳转

article/2025/9/30 13:09:53

一个界面跳转到另一个界面,这就Activity的跳转。我们在开发中常见的跳转有三种。普通跳转、有返回值的跳转、透传跳转。我们先来看一种。


1 . Activity的普通跳转(传值跳转)

这个跳转是最简单的

Intent intent=new Intent();

intent.setClass(this, OtherActivity.class);

intent.setClassName(this, "com.zy.MutiActivity.OtherActivity");  //方法3 此方式可用于打开其它的应用

intent.setComponent(new ComponentName(this, OtherActivity.class));  //方法4

intent.putXXX("key" , value);//传值

startActivity(intent2); //只用Activity的这个方法,因为与有返回值的跳转使用的跳转的方法是不一样的。

2 . Activity有返回值得跳转

先看代码:

发起请求的界面

public class SecondActivity extends Activity {private Button but ,but1 ;
    private TextView textView ;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView( R.layout.secondlayout);
        but = (Button) findViewById( R.id.but2);
        but1 = (Button) findViewById( R.id.but22);
        textView = (TextView) findViewById( R.id.text);
        but.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View v) {Intent intent = new Intent();
                intent.setClass( SecondActivity.this , ThirdActivity.class);
                startActivityForResult(intent , 1 ); //第二参数为请求码,代表是从这个界面跳转的。
            }});
        but1.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View v) {finish();
            }});
        System.out.println(" =======> onCreate");
    }@Override
    protected void onStart() {super.onStart();
        System.out.println(" =======> onStart");
    }@Override
    protected void onResume() {super.onResume();
        System.out.println(" =======> onResume");
    }@Override
    protected void onPause() {super.onPause();
        System.out.println(" =======> onPause");
    }@Override
    protected void onStop() {super.onStop();
        System.out.println(" =======> onStop");
    }@Override
    protected void onDestroy() {super.onDestroy();
        System.out.println(" =======> onDestroy");
    }@Override
    protected void onRestart() {super.onRestart();
        System.out.println(" =======> onRestart");
    }/**
     * 这个方法用来接收返回值
     * @param requestCode 请求码,当requestCode与上面跳转时传的请求码一样时,说明是这个界面的请求
     * @param resultCode  结果码(是否成功)
     * @param data        返回来的数据保存在这里面
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);
        System.out.println("===========> onActivityResult");
        if(requestCode == 1 ){if(resultCode == Activity.RESULT_OK){textView.setText(data.getStringExtra("key"));
            }}}
}

返回结果的界面 代码:

public class ThirdActivity extends Activity{private Button but , but1 ;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView( R.layout.thirdlayout);
        but = (Button) findViewById( R.id.but3);
        but1 = (Button) findViewById( R.id.but33);
        but.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View v) {Intent intent = new Intent();
                intent.setClass( ThirdActivity.this , MainActivity.class);
                startActivity( intent );
            }});
        but1.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View v) {Intent intent = new Intent();
                intent.putExtra("key" , "有返回值的跳转");
                setResult(Activity.RESULT_OK ,intent ); //Activity.RESULT_OK结果码,OK为成功 , intent保存数据
                finish();
            }});
    }
}
看结果:

      

    

图是有点丑了,但能说明效果就可以了。


 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);
        System.out.println("===========> onActivityResult");
        if(requestCode == 1 ){if(resultCode == Activity.RESULT_OK){textView.setText(data.getStringExtra("key"));
            }}}
方法的解析

 requestCode : 这个值是通过startActivityResult( )方法传递过去的Requstcode的请求码,传递过去的是多少这个值就是多少。那么不要这个值是否可以?设想一下,假如ActivityA 界面有两个操作,一个操作是从AcitivityB获取返回的结果,另外一个操作是从ActivityC获取操作,而我们不重写onActivityResult方方法接受返回值,那么如何区分是哪个界面的返回值呢?这个时候就需要判断requestCode值,requestCode 这个值是通过startActivityResult( )方法原封不动的传递过去的,所以我们可以定义一个从B跳转的requestCode 值(假设为  1 ) ,设B的跳转requestCode 值(假设为 2 )。我们就可以在A界面的onActivityResult()方法中根据requestCode值来判断只从那个界面返回的值了,然后做不同的逻辑处理。

resultCode :结果的状态,这个值分别为Activity.CANCE , Activtity.RESULT_OK:OK代表返回值正常,这个时候我们就可以处理结果,如果为canse说明异常这个时候获取不到数据。

data : 返回的数据就保存在这个里面,从这个里面获取数据。

05-12 17:17:30.276 23514-23514/com.example.administrator.sharedpreferences I/System.out: ===========> onActivityResult
05-12 17:17:30.276 23514-23514/com.example.administrator.sharedpreferences I/System.out:  =======> onRestart
05-12 17:17:30.276 23514-23514/com.example.administrator.sharedpreferences I/System.out:  =======> onStart
05-12 17:17:30.276 23514-23514/com.example.administrator.sharedpreferences I/System.out:  =======> onResume

说明onActivityResult()再onRestart()的前面执行。需要注意

2 . Activity的透传跳转。

看代码:

MainActivity

public class MainActivity extends FragmentActivity {private boolean tager = false;
    private EditText keyET;
    private EditText valueET;
    private Button insertBtn;
    private Button deleteBtn;
    private Button modifyBtn;
    private Button queryBtn;
    private Button clearBtn;
    private Button startActivity ;
    private TextView textView;
    /** 存储的文件名 */
    public static final String DATABASE = "Database";
    /** 存储后的文件路径:/data/data/<package name>/shares_prefs + 文件名.xml */
    public static final String PATH = "/data/data/code.sharedpreferences/shared_prefs/Database.xml";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        keyET = (EditText) findViewById(R.id.key);
        valueET = (EditText) findViewById(R.id.value);
        insertBtn = (Button) findViewById(R.id.insert);
        deleteBtn = (Button) findViewById(R.id.delete);
        modifyBtn = (Button) findViewById(R.id.modify);
        queryBtn = (Button) findViewById(R.id.query);
        clearBtn = (Button) findViewById(R.id.clear);
        startActivity = (Button) findViewById( R.id.but1);
        // 用于显示存储文件中数据
        textView = (TextView) findViewById(R.id.content);
        insertBtn.setOnClickListener(new OperateOnClickListener());
        deleteBtn.setOnClickListener(new OperateOnClickListener());
        modifyBtn.setOnClickListener(new OperateOnClickListener());
        queryBtn.setOnClickListener(new OperateOnClickListener());
        clearBtn.setOnClickListener(new OperateOnClickListener());
        startActivity.setOnClickListener( new OperateOnClickListener());
    }class OperateOnClickListener implements View.OnClickListener {@Override
        public void onClick(View v) {// 获取SharedPreferences对象
            SharedPreferences sp = getSharedPreferences(DATABASE, Activity.MODE_PRIVATE);
            // 获取Editor对象
            SharedPreferences.Editor editor = sp.edit();
            // 获取界面中的信息
            String key = keyET.getText().toString();
            String value = valueET.getText().toString();
            switch (v.getId()) {// 插入数据
                case R.id.insert:if(!tager) {editor.putString("1", "123");
                        editor.commit();
                        tager = true;
                    }else{editor.putInt("1", 456);
                         editor.commit();
                        tager = false;
                }textView.setText(MainActivity.this.print());
                    break;
                // 删除数据
                case R.id.delete://editor.remove(key);
                    int value1 = Integer.valueOf(value);
                    editor.putInt(key, value1);
                    editor.commit();
                    textView.setText(MainActivity.this.print());
                    break;
                // 修改数据
                case R.id.modify:editor.putString(key, value);
                    editor.commit();
                    textView.setText(MainActivity.this.print());
                    break;
                // 查询数据
                case R.id.query:String result = sp.getString(key, "");
                    textView.setText("key=" + key + ",value=" + result);
                    break;
                // 清空所有数据
                case R.id.clear:editor.clear();
                    editor.commit();
                    textView.setText(MainActivity.this.print());
                    break;
                case R.id.but1:Intent intent = new Intent();
                    intent.setClass( MainActivity.this , SecondActivity.class);
                    startActivityForResult(intent , 100);
                    break;
            }}}/** 获取存储文件的数据 */
    private String print() {StringBuffer buff = new StringBuffer();
        try {BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(PATH)));
            String str;
            while ((str = reader.readLine()) != null) {buff.append(str + "/n");
            }} catch (Exception e) {e.printStackTrace();
        }return buff.toString();
    }@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);
        if(requestCode  == 100 && resultCode == Activity.RESULT_OK){textView.setText(data.getStringExtra("key"));
        }}
}


SencedActivity

public class SecondActivity extends Activity {private Button but ,but1 ;
    private TextView textView ;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView( R.layout.secondlayout);
        but = (Button) findViewById( R.id.but2);
        but1 = (Button) findViewById( R.id.but22);
        textView = (TextView) findViewById( R.id.text);
        but.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View v) {Intent intent = new Intent();
                intent.setClass( SecondActivity.this , ThirdActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
                startActivity( intent );
                finish();
            }});
        but1.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View v) {finish();
            }});
        System.out.println(" =======> onCreate");
    }@Override
    protected void onStart() {super.onStart();
        System.out.println(" =======> onStart");
    }@Override
    protected void onResume() {super.onResume();
        System.out.println(" =======> onResume");
    }@Override
    protected void onPause() {super.onPause();
        System.out.println(" =======> onPause");
    }@Override
    protected void onStop() {super.onStop();
        System.out.println(" =======> onStop");
    }@Override
    protected void onDestroy() {super.onDestroy();
        System.out.println(" =======> onDestroy");
    }@Override
    protected void onRestart() {super.onRestart();
        System.out.println(" =======> onRestart");
    }
}

ThirdActivity

public class ThirdActivity extends Activity{private Button but , but1 ;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView( R.layout.thirdlayout);
        but = (Button) findViewById( R.id.but3);
        but1 = (Button) findViewById( R.id.but33);
        but.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View v) {Intent intent = new Intent();
                intent.setClass( ThirdActivity.this , MainActivity.class);
                startActivity( intent );
            }});
        but1.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View v) {Intent intent = new Intent();
                intent.putExtra("key" , "有返回值的跳转");
                setResult(Activity.RESULT_OK ,intent ); //Activity.RESULT_OK结果码,OK为成功 , intent保存数据
                finish();
            }});
    }
}

关键在SecondActivtiy 跳转时,Intnet设置Flag标志

看结果:

      
















http://chatgpt.dhexx.cn/article/jYMaSTsX.shtml

相关文章

如何使用正则表达式对输入数字进行匹配详解

前言&#xff1a; 最近有一个区间范围限制&#xff0c;一般255数字以下的都能在网上薅到&#xff0c;但是需要弄一个int16、int32、int64范围的输入限制......在网上逛了很久都没找到&#xff0c;基本都是从0开始教学那种&#xff0c;我又不想看&#xff0c;觉得写的范围太大了…

python正则表达式从字符串中提取数字

文章目录 python从字符串中提取数字使用正则表达式&#xff0c;用法如下&#xff1a;解题思路&#xff1a;代码如下&#xff1a; 匹配指定字符串开头的数字匹配包含指定字符串开头的数字匹配时间&#xff0c;17:35:24匹配时间&#xff0c;20181011 15:28:39 python从字符串中提…

Java正则表达式校验数字、字母及特殊字符

一、校验数字的表达式 1.数字&#xff1a;^[0-9]*$ 2.n位的数字&#xff1a;^\d{n}$ 3.至少n位的数字&#xff1a;^\d{n,}$ 4.m-n位的数字&#xff1a;^\d{m,n}$ 5.零和非零开头的数字&#xff1a;^(0|[1-9][0-9]*)$ 6.非零开头的最多带两位小数的数字&#xff1a;^([1-9][0-9…

JS正则表达式验证数字、非数字、正数、负数

<script type"text/javascript"> function judgeSign(num) {var reg new RegExp("^-?[0-9]*.?[0-9]*$");if ( reg.test(num) ) {var absVal Math.abs(num);return numabsVal?是正数:是负数;}else {return 不是数字;} } console.log(judgeSign(-…

使用正则表达式对输入数字进行匹配

前言&#xff1a; 最近有一个区间范围限制&#xff0c;一般255数字以下的都能在网上薅到&#xff0c;但是需要弄一个int16、int32、int64范围的输入限制......在网上逛了很久都没找到&#xff0c;基本都是从0开始教学那种&#xff0c;我又不想看&#xff0c;觉得写的范围太大了…

Python-正则表达式匹配数字

re.match和re.search的区别&#xff1a; re.match 尝试从字符串的起始位置匹配一个模式&#xff0c;如果不是起始位置匹配成功的话&#xff0c;match()就返回none&#xff1b; re.search 扫描整个字符串并返回第一个成功的匹配。 匹配 字符串里面的全部数字&#xff1a;\d 例…

常用正则表达式汇总—(数字匹配/字符匹配/特殊匹配)

匹配大写字母开头单词 r"\b[A-Z][a-z]*\b" r"\b[A-Z]\w*\b"匹配数字 r"\s(-?\d\.?/?\d*%?)"替换日期 2019-09-09 换成 2019.09.09 r"\d{4}-\d{1,2}-\d{1,2}"比较常用的几个正则表达式(匹配数字)评…

【质量】镜像漏洞扫描工具Trivy原理和操作

目录 Trivy工作原理 cve ID和CVE数据库 Trivy扫描镜像流程 快速入门 Trivy工作原理 cve ID和CVE数据库 个人理解&#xff1a; 当有人发现漏洞时&#xff0c;在社区提交漏洞&#xff0c;然后被cve 官方数据库收录&#xff0c;分配cve id。 漏洞扫描工具扫描镜像内的组件…

基于JAVA_Swing的图形化GUI漏洞扫描工具开发的编程思维

文章目录 前言一、工具外观整体设计二、漏洞检测类模块总结2022年6月27日更新此篇 前言 CSDN博客有很长一段时间没有更新&#xff0c;漏洞复现的文章也没有经常发了&#xff0c;原因是因为我这段时间在做一件大事&#xff0c;并且这件大事已经做完啦&#xff01;&#xff01;&…

Xray-强大的漏洞扫描工具

Xray是什么&#xff1f; xray (https://github.com/chaitin/xray) 是从长亭洞鉴核心引擎中提取出的社区版漏洞扫描神器&#xff0c;支持主动、被动多种扫描方式&#xff0c;自备盲打平台、可以灵活定义 POC&#xff0c;功能丰富&#xff0c;调用简单&#xff0c;支持 Windows …

Java 漏洞扫描工具之 IDE 插件中强烈建议修复的漏洞

近期有很多同学在找【漏洞扫描工具】&#xff0c;今天来推荐下这款开源组件的漏洞检测工具&#xff1a;使用简单、能力专业、风险展示清晰的 ide 插件“murphysec”。 它可以快速识别项目中使用了哪些存在安全缺陷的开源组件&#xff0c;并帮助一键修复问题。目前支持Java、Ja…

Web安全 Acunetix漏洞扫描工具.

Acunetix 漏洞扫描工具概括 Acunetix 是一个自动化的 Web 应用程序安全测试工具&#xff0c;是通过检查 SQL 注入&#xff0c;跨站点脚本&#xff08;XSS&#xff09;和其他可利用漏洞等来审核您的 Web 应用程序。一般来说&#xff0c;Acunetix 能够扫描任何通过网络浏览器访问…

idea漏洞扫描工具SonarLint

目的 在使用持续集成发布时&#xff0c;其中加入了sonar的校验&#xff0c;为了提高sonar校验评分&#xff0c;希望在本地进行体检校验。 方案 在idea中安装代码校验插件&#xff0c;这里使用SonarLint | Code Quality and Code Security starts in your IDE&#xff0c;其他还…

【网安神器篇】——WPScan漏洞扫描工具

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座右…

基于JavaFx的ThinkPHP漏洞扫描工具---RexHa(Aazhen)的一些说明

文章目录 吹水环节一、工具的功能&#xff08;新旧版本对比&#xff09;二、工具的使用与操作2.1 工具新旧版展示2.2 漏洞单个扫描验证功能展示2.2.1 Thinkphp-2.x rce--&#x1f44c;&#x1f3fb;2.2.2 ThinkPHP-5.0.23-RCE--&#x1f44c;&#x1f3fb;2.2.3 ThinkPHP5.0.x-…

漏洞扫描程序

什么是漏洞 漏洞是任何软件中存在的安全漏洞。如果被利用&#xff0c;这些缺陷可能允许攻击者未经授权访问敏感信息&#xff0c;或者通常造成严重破坏&#xff0c;使整个组织面临风险。外部安全研究人员和相关供应商不断审查公开可用的软件以识别漏洞。任何发现的漏洞都会使用…

Web安全 Nessus漏洞扫描工具.

Nessus的概括 Nessus 是世界上很流行的漏洞扫描程序&#xff0c;全世界很多组织都有在使用它。该工具提供完整的电脑漏洞扫描服务&#xff0c;并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描软件&#xff0c;Nessus可同时在本机或远端上遥控&#xff0c;进行系统的漏洞分…

用于渗透测试的10种漏洞扫描工具

漏洞扫描工具是IT部门中必不可少的工具之一&#xff0c;因为漏洞每天都会出现&#xff0c;给企业带来安全隐患。 漏洞扫描工具有助于检测安全漏洞、应用程序、操作系统、硬件和网络系统。 黑客在不停的寻找漏洞&#xff0c;并且利用它们谋取利益。网络中的漏洞需要及时识别和…

漏洞扫描工具之nessus

5.1 使用Nessus Nessus号称是世界上最流行的漏洞扫描程序&#xff0c;全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务&#xff0c;并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描软件&#xff0c;Nessus可同时在本机或远端上遥控&#xff0c;进行系…

漏洞扫描工具(一)

FSCAN fscan 是一个内网综合扫描工具&#xff0c;方便一键自动化、全方位漏洞扫描。 它支持主机存活探测、端口扫描、常见服务的爆破、ms17010、redis批量写公钥、计划任务反弹shell、读取win网卡信息、web指纹识别、web漏洞扫描、netbios探测、域控识别等功能。 源码链接&a…