博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我的Android第五章:通过Intent实现活动与活动之间的交互
阅读量:6229 次
发布时间:2019-06-21

本文共 7230 字,大约阅读时间需要 24 分钟。

 Intent在活动的操作

       作用:

     Itent是Android程序中各个组件直接交换的一个重要方式可以指定当前组件要执行任务同时也可以给各个组件直接进行数据交互

              同时Intent启动往往可以启动活动,启动服务,以及发送广播等场景        

        分类

               1.显示Intent和隐示Intent

  显示Intent操作

    1.首先我们新建一个Android工程

 

    在分别讲解显示意图和隐示意图时我们要在rec目录 -layout资源新建活动 。

      

       然后右键点击新建一个activity_second.xml布局文件

             

      然后在该文件下添加一个按钮组件

 

   2.新建一个活动

      在我们添加完按钮组件之后同时给按钮取个名字叫button2和唯一id名,然后在src 目录工程包下新建一个活动SecondActivity继承Activity类让其成为活动类

      然后重写onCreate()方法,同时给该活动设置上下文布局文件

package com.example.intentdome;import android.app.Activity;import android.os.Bundle;public class SecondActivity extends Activity {	@Override	protected void onCreate(Bundle savedInstanceState) {	        super.onCreate(savedInstanceState);         setContentView(R.layout.activity_second);//读取我们刚才在layout资源文件新建的布局文件	}}

    3.然后在AndroidManifest.xml工程配置文件中注册一个活动

 

       以上步骤已经操作完毕,那我们开始下一步操作

  给按钮绑定事件

      1.给定MainActivit视图文件绑定一个点击事件

@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取按钮对象        Button btn1 = (Button)findViewById(R.id.button1);        //给该按钮绑定一个监听事件        btn1.setOnClickListener(new OnClickListener() {                        @Override            //当鼠标点击操作事着触发该操作            public void onClick(View v) {                            }        });            }

 

      2.创建意图对象

Intent的构   该类有多个构造函数其中一个Intent(Context packageCntext,Class
cls) 第一个参数:指定要启动的上下文 第二个参数:指定要启动的目标活动

   //获取一个意图对象

    Intent intent = new Intent(MainActivity.this,SecondActivity.class);

 

 

    3.实现活动启动之间的交互

@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取按钮对象        Button btn1 = (Button)findViewById(R.id.button1);        //给该按钮绑定一个监听事件        btn1.setOnClickListener(new OnClickListener() {            @Override            //当鼠标点击操作事着触发该操作            public void onClick(View v) {                //获取一个意图对象                //实现活动与活动直接的交互                Intent intent = new Intent(MainActivity.this,SecondActivity.class);                //调用启动活动操作                startActivity(intent);            }                    });            }

             

      隐示Intent操作

            特点:隐示它并不明确表面指出我们要启动那个活动,而是抽象的指定一系列action和category等信息

    1.实现隐示操作:打开AndroidManifest.xml文件重新编写activity的内容

 

      2.重新编写MainActivity.java的按钮点击事件

@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取按钮对象        Button btn1 = (Button)findViewById(R.id.button1);        //给该按钮绑定一个监听事件        btn1.setOnClickListener(new OnClickListener() {                        @Override            //当鼠标点击操作事着触发该操作            public void onClick(View v) {                /*    //获取一个意图对象                //实现活动与活动直接的交互                Intent intent = new Intent(MainActivity.this,SecondActivity.class);                //调用启动活动操作                startActivity(intent);*/                Intent intent = new Intent("com.example.intentdome.ACTION_START");                startActivity(intent);            }                    });            }

 

    3.运行:输出同样的结果

  使用隐示启动其他程序内部活动

        其实隐示不仅仅可以启动自己程序的活动,还可以启动其他程序的活动,使得Android多个应用共享成为了可以,这样程序与程序直接进行数据交换,这样就不用我们而外编写其他程序活动来操作了

       以下一个案例展示通过自己本程序去调用系统的浏览器来打开一个博客的网页操作

   1.重新编写MainActivity.java按钮点击事件

@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取按钮对象        Button btn1 = (Button)findViewById(R.id.button1);        //给该按钮绑定一个监听事件        btn1.setOnClickListener(new OnClickListener() {                        @Override            //当鼠标点击操作事着触发该操作            public void onClick(View v) {                Intent intent = new Intent(Intent.ACTION_VIEW);                intent.setData(Uri.parse("http://www.cnblogs.com/xiaotaojing/"));                startActivity(intent);            }                    });            }

        

    以上是Intent中通过Intent来启动一个活动操作,其实Intent会可以活动与活动直接进行数据交互和传递,那然我们来看看是怎么样的一个过程吧

    Intent实现活动中数据的传递

     设置数据

        Intetn提供了一个putExtra()方法用于以键-值对的形式进行数据的存放,相当与Serlet的作用域对象setAttibute()方法,puExtra()方法提供了方法重载,将传递的数据暂存在Intent中

         启动一个活动到另一个活动时,只需要在重Intent中获取数据即可

@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取按钮对象        Button btn1 = (Button)findViewById(R.id.button1);        //给该按钮绑定一个监听事件        btn1.setOnClickListener(new OnClickListener() {						@Override			//当鼠标点击操作事着触发该操作			public void onClick(View v) {				Intent intent = new Intent(MainActivity.this,SecondActivity.class);				intent.putExtra("data", "Hello SecondActivity");				startActivity(intent);			}			        });            }

    获取数据

            可以通过getStringExtra()方法获取存放的数据

Intent.getStringExtra(设值的参数名)

 

         然后在ScondActivity.java中编写如下代码

package com.example.intentdome;import android.app.Activity;import android.os.Bundle;import android.widget.Toast;public class SecondActivity extends Activity {	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_second);		//通过提示框来显示数据		Toast.makeText(this, getIntent().getStringExtra("data"), Toast.LENGTH_SHORT).show();	}}

   运行测试  

                     

    携带数据返回上一个活动

   既然讲到了一个活动可以给下一个活动传递数据,那可以返回数据为上一个活动呢? 其实是可以的,当你点返回键时不是可以返回上一个活动了吗?哈哈,那只是返回并没有携带数据一起返回 

         怎样做才可以重一个活动返回上一个活动呢?还可以携带数据,其实我们需要用到一个方法就是startActivityForResulte() 其中该方法有两个参数

          第一个参数  :Intent对象、第二个参数:请求的结果码. 

btn1.setOnClickListener(new OnClickListener() {				@Override	//当鼠标点击操作事着触发该操作	public void onClick(View v) {		Intent intent = new Intent(MainActivity.this,SecondActivity.class);		startActivityForResult(intent, 1);	}		});

    第二在SecondActivity.java中编写如下代码

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_second);    Button btn2 = (Button)findViewById(R.id.button2);    btn2.setOnClickListener(new OnClickListener() {    @Override    public void onClick(View arg0) {        Intent intent = new Intent();        //设置要返回的值        intent.putExtra("data_return", "我已经返回上一个活动了");        //设置返回结果        setResult(RESULT_OK, intent);        finish();//销毁前执行    }});

  由于我们设置了starActivityForReturn()方法来启动SecondActivity,在SecondActivity被销毁之后会调用一个活动的onActivityResult()方法,所以我要在MainActivity.java中重写

      onActivityResult()方法

@Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {    	super.onActivityResult(requestCode, resultCode, data);    	    	switch (requestCode) {	     case 1:		 if(resultCode==RESULT_OK){			Toast.makeText(this, data.getStringExtra("data_return"),Toast.LENGTH_SHORT).show() ;		 }		 break;		      default:		break;	}    }

  3.测试

                       

     成功执行

   是不是这次讲解的知识点很强大呢?哈哈,这已经实现了像网站中页面与页面之间跳转同时携带数据的效果 

  

    

 

转载于:https://www.cnblogs.com/xiaotaojing/p/6080877.html

你可能感兴趣的文章
[译]ECMAScript 5 Objects and Properties
查看>>
MPEG-7 视觉描述符
查看>>
ELK6.5 Nginx 日志搜集-05 filebeat 安装
查看>>
如何用 Retrofit 2 在安卓上实现 HTTP 访问?
查看>>
2013 北京 QCon热点分享
查看>>
Linux系统下利用文件创建文件系统
查看>>
阿轶来了~
查看>>
kickstart为root用户设置自定义密码
查看>>
tail命令
查看>>
列表运用和copy详解
查看>>
Nginx上部署HTTPS + HTTP2
查看>>
awk
查看>>
踩过的坑
查看>>
如何使用 tomcat !!!
查看>>
计算机网络参考模型
查看>>
戴尔的对比
查看>>
8款高质量小程序推荐:(工具类、电影类、阅读类)
查看>>
看图了解RocksDB
查看>>
python整数和变量
查看>>
深入探讨下Linux下修改hostname的五个问题(一)
查看>>