一个界面跳转到另一个界面,这就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标志

看结果:

      

Activity的三种跳转相关推荐

  1. php写js跳转页面,php实现页面的三种跳转

    php实现页面的三种跳转方法:1.通过header函数实现跳转:2.使用Meta标签实现跳转:3.通过在PHP页面中输出JavaScript跳转代码来实现. 本文操作环境:windows7系统.PHP ...

  2. this.$router 的三种跳转页面方法

    第一种: this.$router.push('需要跳转到的路径名称') 此方法跳转后,会在历史栏目中保存路劲地址,当点击历史标签时可以进行访问 第二种: this.$router.replace(' ...

  3. 启动另外的一个应用程序的Activity(三种方式)

    [java] view plaincopyprint? <span style="font-family:SimSun;"></span><pre n ...

  4. 【vue-route路由配置+路由router三种跳转方式+两类传参queryparams】

    PS:个人总结笔记 简单说下,很粗略,入门级 1.vue-route路由配置 import Vue from 'vue' import VueRouter from 'vue-router'//使用V ...

  5. java 转jsp_【转】JSP三种页面跳转方式

    使用JSP大约有下列三种跳转方式: 1. response.sendRedirect(); 2. response.setHeader("Location","" ...

  6. a标签跳转后关闭当前页面_微信小程序2020-day-2 导航项目(跳转三种形态)

    day-2 导航项目(跳转三种形态) 转发跳转:保留当前页面,跳转新页面,可返回 重定向跳转:关闭当前页面,跳转,不可返回,不能指定标签导航页面 跳转标签导航:跳转到标签导航页面,标签导航跟随选中 a ...

  7. Activity生命周期的三种状态

    生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期.同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态,分别是运行状态.暂停状态和停止状态.接下来将 ...

  8. 什么是生命周期?Activity生命周期的三种状态

    什么是生命周期 生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期.同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态,分别是运行状态.暂停状态和停 ...

  9. ASP.NET实现页面跳转三种方式

    文章目录 前言 ASP.NET页面跳转比较 1. Server.Execute() 2. Server. Transfer() Server. Transfer()执行 3. Response.Red ...

最新文章

  1. 升级 Java 编程规范的6个约定
  2. oracle创建数据库、表空间、用户并授权
  3. 【算法】一个简单的支持向量机(SVM)原理
  4. Java基础篇:封装、继承、多态三大特性
  5. 一个好用的markdown表格生成工具
  6. 获得当前应用程序路径C#03
  7. 泰科推标签即服务服务,助力实现最大价值
  8. 操作系统—处理机调度
  9. 前端- 不用React 而使用 Vue,这么做对吗?
  10. Cockroachdb 一、系统环境
  11. UDK初学教程 01: 基本操作
  12. l3119双闪_打印机进纸灯和墨水灯双灯齐闪 解决方法
  13. Angular入门到精通系列教程(14)- Angular 编译打包 Docker发布
  14. Windows添加开机和关闭开机启动项
  15. 瓴羊CEO朋新宇:从数据发现问题到数据创造价值|2022全球数字价值峰会-阿里云开发者社区
  16. 新浪微博PC端模拟登陆
  17. 1065 单身狗(25 分)
  18. Flink系列文档-(YY05)-Flink编程API-多流算子
  19. 五分钟JAVA代码教会你:FFmpeg实现视频试看(Centos7版本)
  20. 电商智能写作:阿里妈妈创意中心智能文案引擎

热门文章

  1. java aviator使用类_Aviator学习笔记
  2. python----------------python文件操作
  3. 深度学习在windows和linux,【AI白身境】深度学习从弃用windows开始
  4. 【数学建模】基于matlab三维海浪模型仿真【含Matlab源码 1159期】
  5. 牟平职业中专计算机应用,烟台市公共企事业单位信息公开 烟台市牟平区职业中等专业学校(烟台工贸学校) 烟台市牟平区职业中等专业学校(烟台工贸学校)...
  6. 庄小威超分辨storm_哈佛大学庄小威加盟北大生物动态光学成像中心
  7. 【Autosar 存储栈Memery Stack 1.NVM Block的了解】
  8. 数据库逻辑设计 完全函数依赖、部分函数依赖、传递函数依赖、码、候选码、主码、范式
  9. 一场压测引发的血案(有点虚构了,不懂行真不行)
  10. oracle cursor rowcount,关于cursor的rowcount