学Android---Intent

<!--  第一次写,有点乱,各位见谅  -->

一、初识Intent

1、什么是Intent:

       Intent可以理解为信使(意图)。其作用是协助完成android各个组件之间的通讯,目前我所接触到的Intent主要是用来从一个Activity跳转到另一个Activity。

2、Intent的语法定义:

Intent由一个动作和内容组成,定义格式如下:Intent intent = new Intent(动作,内容); 

动作有两种,

一种是Android内部定义的动作,例如ACTION_VIEW、ACTION_DIAL、ACTION_CALL等

具体使用如下:

(1)浏览网站:
Uri uri =Uri.parse("http://www.sina.com.cn");
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
(2)调用拨号按钮:
Uri uri =Uri.parse("tel:123456789");           //给号码为123456789的人拨号
Intent intent = new Intent(Intent.ACTION_DIAL,uri);

(3)拨打电话:(需要在Manifest文件中设置CALL_PHONE权限)

Uri uri =Uri.parse("tel:123456789");

Intent intent = new Intent(Intent.ACTION_CALL,uri);      //直接把电话打出去


另一种是用户自定义的Activtity,例如再new一个Activity命名为SecondActivity,语法为:

Intent intent = new Intent();

intent.setClass(MainActivity.this,SecondActivity.class);     //(主程序类.this,自定义类.class)

//也可以不使用setClass,直接用Intent intent = new Intent(MainActivity.this,SecondActivity.class);

startActivity(intent);


二、使用Intent实现最常用的页面跳转

实现页面跳转的方式:

(1)startActivity(intent)      //无返回值,直接跳转到另一个界面

(2)startActivityForResult ( intent, requestCode )        //有返回值,可以把第二个页面的值传回第一个页面
          requestCode是识别代码,用来表示发件人是谁,命名可以自定义,可以用1、2、3等数字表示。

          需关联两种方法:

onActivityResult ( int requestCode, int resultCode, Intent data)   //在第一个页面中实现,用来接收第二个页面传回来的值

setResult ( resultCode ,intent)   //在第二个页面中使用,传值回第一个页面。resultCode类似于requestCode

代码实现跳转

(1)startActivity();

       /**无返回值跳转

         * 1、点击button1
         * 通过startActivity的方式来实现页面跳转
         */
        btn1.setOnClickListener(new OnClickListener() {
           
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                /*
                 * 第一个参数:上下文对象this
                 * 第二个参数:目标文件
                 */
                Intent intent=new Intent(firstActivity.this, secondActivity.class);
                startActivity(intent);
            }
        });

(2)有返回值的跳转

         /*

         * 2、通过startActivityForResult来实现页面跳转

         * 这一段类似于前边,只修改startActivity为startActivityForResult就好

         */
        btn2=(Button) findViewById(R.id.button2);
        btn2.setOnClickListener(new OnClickListener() {
           
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(firstActivity.this, secondActivity.class);
                /*
                 *第一个参数:intent对象
                 *第二个参数:请求的一个标志
                 */
                startActivityForResult(intent, 1);
            }
        });
    }

/**
* 此时在第二个页面中设置返回值
*/
        btn3.setOnClickListener(new OnClickListener() {
           
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent_data=new Intent();
                intent_data.putExtra("data", "你好");        //首先把要传回去的值放入intent_data中
                setResult(2,intent_data);               
                //结束当前页面,返回到第一个页面
                finish();
            }
        });

    /*再回到第一个页面接收传回来的值
     * 通过startActivityForResult接收返回数据
     * resultCode:第二个页面返回的标志
     * data:第二个页面回传的数据
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==1&&resultCode==2){
            String content=data.getStringExtra("data");
            textview.setText(content);
        }
    }

三、补充:附带数据的Intent:
其原理是在目前的Activity里将要附带的数据放在Bundle对象中,当对方收到Intent附带的Bundle对象后,再从Bundle中取出附带的数据。
(1)Intent传递数据的流程:
使用setClass方法指定执行类--->根据数据的类型通过Bundle对象进行打包--->使用putExtra方法加入Bundle对象--->使用startActivity方法执行Intent;
Intent intent = new Intent();
intent.setClass(MainActivity.this,SecondActivity.class);
-----------
Bundle bundle = new Bundle();
bundle.putString("NAME","David");
------------
intent.putExtra(bundle);
-------------
startActivity(intent);
(2)取出Intent的数据:
取出Bundle数据的流程:
使用getIntent()方法获取传递的Intent--->利用Intent的getExtras()方法,从Intent中获取Bundle对象--->根据邮包名称获取Bundle对象的数据
Intent intent = this.getIntent();
----------
Bundle bundle = intent.getExtras();
----------------

String name = bundle.getString("NAME");


<!--  第一篇博客,其实是整理了一下最近的笔记,所以没有特意截图,干说有点枯,各位轻喷,o(∩_∩)o  -->

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值