阅读 287

Android Activity活动页面跳转与页面传值

大家好,本篇文章主要讲的是Android Activity活动页面跳转与页面传值,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

目录
  • 概述

  • Intent

    • 显示Intent启动

    • 隐式Intent启动

  • 启动其他程序

    • 网页浏览

    • 拨号界面

  • 根据包名打开软件

    • 根据类名打开界面

      • startActivityForResult

        • 主页面

        • 跳转界面

      • 页面传值

        • Intent.putExtra 传值

        • 借助 Bundle 传值

      概述

      Android开发少不了的就是页面之间的跳转,或者想要呼叫打开其他应用等

      Intent

      Intent是Android程序中各组件之间进行交互的一种重要方式,不仅可以指明当前组件想要执行的运作,还可以在不同组件之间传递数据。

      显示Intent启动

      第一个参数为启动活动的上下文

      第二个参数为想要启动的目标活动

      1
      2
      Intent intent = new Intent(MainActivity.this, TabHostActivity.class);
      startActivity(intent);

      通过这个构造函数就可以构建出Intent的“意图”,且目标明确,所以为显示启动

      隐式Intent启动

      根据 <intent-filter> 中设定的 action 和 category 来启动,且只有<action>和<category>中的内容同时能够匹配上时,这个活动才能响应。

      1
      2
      3
      Intent intent = new Intent("com.zqunyan.zgstudy.ACTION_START");
      intent.addCategory("com.zqunyan.zgstudy.MY_CATEGORY");
      startActivity(intent);

      如果 <intent-filter> 中的 category 值是 android.intent.category.DEFAULT 则可以省略addCategory(),因为DEFAULT是一种默认的 category,在调用 startActivity() 方法的时候会自动添加到 intent 中,即

      1
      2
      Intent intent = new Intent("com.zqunyan.zgstudy.ACTION_START");
      startActivity(intent);

      启动其他程序

      使用隐式 Intent,我们不仅可以启动自己程序内的活动,还可以启动其他程序的活动。

      网页浏览

      action指定为Intent.ACTION_VIEW,其常量值为 android.intent.action.VIEW

      然后将网页地址转换成 Uri 对象传递进去

      1
      2
      3
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setData(Uri.parse("https://www.baidu.com"));
      startActivity(intent);

      拨号界面

      action指定为 Intent.ACTION_DIAL

      1
      2
      3
      Intent intent = new Intent(Intent.ACTION_DIAL);
      intent.setData(Uri.parse("tel:10086"));
      startActivity(intent);

      根据包名打开软件

      借助androdi内部的 PackageManager 来根据包名取得应用的启动页面

      1
      2
      3
      4
      5
      Intent intent = getPackageManager().getLaunchIntentForPackage("com.zqunyan.zgwidget");
      if(intent != null){
          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          startActivity(intent);
      }

      根据类名打开界面

      常用于打开系统设置界面,用于一些快捷功能设置。借助 Component 来实现

      如:下面实例打开华为手机的设置页面

      1
      2
      3
      4
      5
      Intent intent = new Intent();
      ComponentName componentName = new ComponentName("com.android.settings", "com.android.settings.Settings$DisplaySettingsActivity");
      intent.setComponent(componentName);
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      startActivity(intent);

      startActivityForResult

      主页面

      跳转按钮点击事件

      1
      2
      3
      Intent intent = new Intent(MainActivity.this, ReturnValueActivity.class);
      //第二个参数用于处理返回结果是判断是哪个语句调用的
      startActivityForResult(intent, 1); //requestCode = 1

      处理返回结果

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent intent){
          super.onActivityResult(requestCode, resultCode, intent);
          if(requestCode == 1){
              if(resultCode == 1){
                  String content = intent.getStringExtra("content");
                  lblStatus.setText("success");
              }else{
                  lblStatus.setText("fail");
              }
          }
      }

      跳转界面

      跳转界面传回返回值,并关闭界面

      实例化一个空的 Intent绑定数据到 IntentsetResult() 回传结果值和绑定了数据的 Intent关闭自身,主画面接收返回结果

      1
      2
      3
      4
      5
      6
      Intent intent = new Intent();
      intent.putExtra("content", txtMessage.getText().toString());
      //setResult第一个参数为结果码,常用的有Activity.RESULT_OK、RESULT_CANCELED或者自定义整数型结果码
      // 第二个参数为返回值,返回值封装在Intent中
      setResult(1, intent);
      finish();

      页面传值

      Intent.putExtra 传值

      传值

      1
      intent.putExtra("uname", "admin");

      取值

      1
      2
      Intent intent = getIntent();
      String name = intent.getStringExtra("uname")

      借助 Bundle 传值

      用于在 Activity 之间传送值或数组资料,好处是当一个页面跳转多个页面时,可以共用bundle。

      简单值

      打包

      1
      2
      3
      4
      5
      6
      Bundle bundle = new Bundle();
      bundle.putString("NAME", "QY");
      bundle.putInt("AGE", 18);
      bundle.putDouble("TALL", 175.86);
      bundle.putStringArrayList("lstFilePaths", lstFilePaths);
      intent.putExtras(bundle);

      收包

      1
      2
      3
      4
      5
      Intent intent = this.getIntent();
      Bundle bundle = intent.getExtras();
      String strName = bundle.getString("NAME");
      int intAge = bundle.getInt("AGE");
      ArrayList<String> lstFilePaths = bundle.getStringArrayList("lstFilePaths");

      StringArrayList

      正常传值都为单个实际值,如果想要传送列表数据则一般通过构造函数或参数传递,直接通过 bundle 只能传送 StringArrayList 简单列表类型

      自定义数据类

      首先将自定义的数据类序列化,即继承 implements Serializable 接口

      数据类

      1
      public class GoodsInfoModule implements Serializable {}

      传值

      1
      bundle.putSerializable("goodsInfo", goodsInfo);

      取值

      1
      goodsInfo = (GoodsInfoModule) bundle.getSerializable("goodsInfo");

      到此这篇关于Android Activity活动页面跳转与页面传值的文章就介绍到这了

      原文链接:https://blog.csdn.net/ymtianyu/article/details/121789059


      文章分类
      代码人生
      版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
      相关推荐