zoukankan      html  css  js  c++  java
  • Intent启动一个新的页面

    一,Intent(目的) 的分类

    • 显式 Intent

    构造函数重载之一:

         Intent intent = new Intent(FirstActivity.this,SecondActivity.class);         //创建一个Intent 对象,第一个参数content(传入上下文),第二个参数传入目标活动。
         startActivity(intent);                                                       //通过startActivity方法启动活动,传入参数(intent)    
    
    • 隐形 Intent(个人理解:隐式就是不能直接看到跳转的目的地,而是叫了一声名字,名字符合的人对号入座)

    在AndroidMainfest中对action和category 进行描述,只有当intent中的action和category都匹配时才能启动活动(category默认为DEFAULT(默认的

            <activity android:name=".SecondActivity"
                android:label="这是要启动的activity">
                <intent-filter>
                    <action android:name="com.example.cenzhongman.ACTION_START"/>
                    <category android:name="android.intent.category.DEFAULT"/>
                </intent-filter>
            </activity>

    构造函数重载之二:

           public void onClick(View view) {
                    Toast.makeText(FirstActivity.this, "启动页面二", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent("com.example.cenzhongman.ACTION_START");//直接传入action的字符串
                    //默认的category默认匹配
                    startActivity(intent);
                }

     

    二,关于intent 隐式的更多用法

    可以调用(其他app)如浏览器打开网页:

    button1.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("http://www.baidu.com"));
        startActivity(intent);   //特别注意的是,一定要启动!!!
      }
    });

      这里我们首先指定了 Intent action Intent.ACTION_VIEW, 这是一个 Android 系统内
    置的动作,其常量值为 android.intent.action.VIEW。然后通过 Uri.parse()方法,将一个网址字
    符串解析成一个 Uri 对象,再调用 Intent setData()方法将这个 Uri 对象传递进去。

    三,设定自己的intent接口

    在AndroidMaintest.xml中注册

        <activity android:name=".ThirdActivity"
                android:label="hehe">
                <intent-filter>
                    <action android:name="android.intent.action.VIEW"/>
                    <category android:name="android.intent.category.DEFAULT"/>
                    <data android:scheme="http"/>
                </intent-filter>
            </activity>

    action.View(应该是浏览器接口,我猜是这样。。。。日后完善)
    通过隐式Intent找到 action.VIEW 这个 action ,category 依旧是默认;

    <data>标签指定数据协议  http  协议。(不是http://)

    •  来一个拨打电话的
    • action.DIAL   动作
    • tel    协议  (tel:10086)
    • 永远别忘记启动

    四,Intent传递参数

    Intent 中提供了一系列 putExtra()方法的重载

    • 参数传入
            button2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent("com.example.cenzhongman.ACTION_START");
                    String data = "Hello SecondActivity";
                    intent.putExtra("extra_data",data);//第一个参数是键(亲测,可以随便取),string name 数据的名字,第二个参数,数据
                    startActivity(intent);
                }
            });

    注意这里 putExtra()方法接收两个参数,第一个参数是键,用于后面从 Intent中取值,第二个参数才是真正要传递的数据。

    • 参数获取
            Intent intent = getIntent();//获取启动Intent
            String data = intent.getStringExtra("extra_data");//获取数据关键字
            Log.d("SecondActivity", data);//打印日志

     五,参数的返回

    1.调用startActivityForResult()方法启动activity,需要返回数据

        public void myOnclick(View view) {
            Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
            startActivityForResult(intent,1);
        }    

    2.点击返回按键,事件中创建Intent对象

           public void onClick(View view) {
                  Intent intent = new Intent();
                    intent.putExtra("Data_return","Hello FirstActivity");
                    setResult(RESULT_OK,intent);
                    finish();
                }

    Intent对象仅仅传递数据,不启动新的Activity

    调用了 setResult()方法,用于向上一个活动返回数据的。setResult()方法接收两个参数 ,第一个 参数用于向上一个活动返回处理结果 ,一 般只使用 RESULT_OK
    RESULT_CANCELED 这两个值,第二个参数则是把带有数据的 Intent 传递回去


    3.Activity被销毁之后会回调上一个活动的 onActivityResult()方法 ,重写该方法

    @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       switch (requestCode) {                                                         //检查 equestCode的值来判断数据来源 
       case 1:
         if (resultCode == RESULT_OK) {                                              //判断是否处理成功
           String returnedData = data.getStringExtra("data_return");
           Log.d("FirstActivity", returnedData);
        }
        break;
      default:
      }
    }


    4,按下返回键的情况,重写onBackPressed() 方法

    @Override
      public void onBackPressed() {
        Intent intent = new Intent();
        intent.putExtra("data_return", "Hello FirstActivity");
        setResult(RESULT_OK, intent);
        finish();
    }

    自行销毁一个活动

    杀死一个人只需要一句话,销毁活动也一样:

    finish();
    岑忠满的博客新站点 https://cenzm.xyz
  • 相关阅读:
    Linq 和 Lambda 查询中按照多个值进行分组GroupBy
    enter键触发事件的清除
    3、Python 基础类型 -- List 列表类型
    2、Python 基础类型 -- String 字符串类型
    1、Python 基础类型 -- Number 数字类型
    JMeter 常用网站
    性能测试之基础理论
    JMeter 性能测试实例
    JMeter 服务器监控插件环境配置
    【C++】利用指针实现通过函数改变多个参数的值
  • 原文地址:https://www.cnblogs.com/cenzhongman/p/6013231.html
Copyright © 2011-2022 走看看