学到现在,我们发现,我们的实际程序都只在一个界面里转,但事实,我们需要写一些界面相互调用的页面,比如打电话界面,我们可能要弹出一个选择电话号码的列表等等。
在Windows界面中,大家都知道分成模式对话框和无模工对话框,但在手机界面中,我们也不能想象到,我个界面是很难同时显示在一个界面中的,因主屏幕很小。所以说在Android系统中,界面跟我们的Windows还是有不少区别的,Android界面中同一时间只能显示一个界面(Activity),但允许子界面中再调子界面,所以这样想来,在一个开启的程序中,如果调用了子界面后,其实在后面是生成了一个界面栈,如下图可以形式象的表示出:
在系统中,有一个优化处理方式是,一个程序可以且只有一个Activity,如果调用了子界面后,再把该程序隐藏到后台,如果系统不足时,系统会将弹出的Activity收回,只剩下一个最原始的Activity,这个主Activity,也可以说是程序的入口。
说了这么多,我们开始看看,在一个Activity中怎样弹出另一个Activity吧:
通常,依我们的常规相当,启动界面无非就是指定一个新界面的具体类,然后调用某个方法咯,看代码:
Intent intent = new Intent(MainActivity.this, NewForm.class);
startActivity(intent);//或startActivityForResult(intent, 1);
这代码码到并不复杂,我们一项项分析:
l Intent
这个具体我也不清楚怎么来翻译,主要就是用于界面之间的沟通吧,当然可能还有更多功能,以后再慢慢了解去!new Intent(MainActivity.this, NewForm.class);这里的创建就可以看到我们将NewForm这个类传入了。
l startActivity
启动界面函数,传入的参数也就是我们定义好的intent。
l startActivityForResult
这也是一个启动界面的函数,但与startActivity的区别就是,这个方法启动界面后,这个界面可以将返回值传入到父窗体中。至于这个参数1,目前还不是很了解,先用着吧。
其实这一步还是容易让我们接受的,好,再了解第二步,怎样传递参数?比如,我想做一个界面弹出一个人员列表,选一个人后,关闭界面,然后主界面就要知道我选择了哪一个值。
在Android系统中,我们传值采用的是Uri,这是一个用字符串拼接的信息,在系统中也有这么一个类,为什么不用Object而用Uri一个字符串呢,其实Object传递的信息固然多,但不规范,这个程序用Object来包装后,其他程序就不知道怎么样解释你这个Object了。而Uri一个字符串可用的将各种资源HTML文档、图像、视频片段、程序等由一个通过通用资源标志符(Universal Resource Identifier, 简称"URI")进行定位。
Uri分成三部份:访问资源的命名机制;存放资源的主机名;资源自身的名称,由路径表示。
比如“Http://www.baidu.com/text/xxx.html”这里面Http是命名机制(协议名),www.baidu.com是资源位置,text/xxxlhtml是资源名称。在Android系统中如“content://contacts/1”表示,在系统中contacts(联系人)中的第1号,就很容易定位到一个资源了,采用了这些共用的格式后,就可以与系统中的其他处理程序来进行无缝交互,比如
Intent intent = new Intent(Intent.ACTION_DIAL,
Uri.parse(“tel:555-2368”));
startActivity(intent);
就可以用来启动一个拨号程序。
定义好了参数格式,我们在启用界面里就可以用
Uri data = Uri.parse("xxxx");
intent.setData(data);//传递参数
在子界面中,我们用
Intent intent = getIntent();
Uri data = intent.getData();
来接收传来的参数
在子界面中,关闭界面时,也有确定和取消之分,
我们在点击确定按钮时可以这样处理:
Uri data = Uri.parse("Content://" + edit.getText());
Intent result = new Intent(null, data);
setResult(RESULT_OK, result);//传确定信息,和参数
finish();
当点击取消按钮时,这样处理:
setResult(RESULT_CANCELED, null); //传取消信息,和参数
finish();
在父界面中,我们通过一个public void onActivityResult(int requestCode, int resultCode, Intent data)继承函数来处理所有子界面的返回消息。这里面传来了请求代码,返回代码,和返回值,比如:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
Uri horse = data.getData();
TextView txt = (TextView)findViewById(R.id.TextView01);
txt.setText(horse.toString());
}
}
OK,学到此,休息去~~~
注:这几天都是参考《Professional Android Application Development》Reto Meier!
分享到:
相关推荐
androdi调用js函数,js调用android函数
android原生与js互调 android原生与js互调 android原生与js互调
android与JS互调,android与JS互调,android与JS互调
Android与js互调的Demo,希望可以帮助到大家! 对应博客地址:http://blog.csdn.net/qq_34947883/article/details/77990527
1.本文采用的是android调用assest中的本地.html文件,webview展示(加载网络的html效果是一样的,把url替换掉就行) 2.包含本地.html文件加载,点击.html控件,Android端响应 3.包含本地.html文件加载,点击.html...
第三版: 集成友盟和JS和Android的Native方法互调 【豪华测试版】 豪华: 自定义测试面板 可以调用系统短信和邮件等系统应用; JS和Android的Native方法互调用所有情况测试 亲测!可用! 用于Android和...
第二版: 集成友盟和JS和Android的Native方法互调 JS和Android的Native方法互调用所有情况测试 亲测!可用! 用于Android和HTML5混合开发中壳子的使用 后续将加入: Java类结构 和 Js库基本命名规则和...
Android与H5互调
java和js互调
Android 中通过WebView和HTML实现JS交互...1) Android(Java)调用HTML中js代码 2) Android(Java)调用HTML中js代码(带参数) 3) HTML中js调用Android(Java)代码 4) HTML中js调用Android(Java)代码(带参数)
Android与H5互调详细介绍 微信,微博,微商,QQ空间,大量的软件使用内嵌了H5,这个时候就需要了解Android如何更H5交互的了;有些外包公司,为了节约成本,采用Android内嵌H5模式开发,便于在iOS上直接复用页面,...
这个demo实现了,在java代码中加载js,而在js代码中有调用了java的代码
JsAndroid简单互调
Android与Js互调,Java和Js互相调用例子,博客地址:https://blog.csdn.net/dreams_deng/article/details/104738687
android与Js互调源码,切记不能导入project,只能导入module 更多查看我的博客:https://blog.csdn.net/xiayiye5/article/details/97025136
android与Js互调源码,切记不能导入project,只能导入module 更多查看我的博客:https://blog.csdn.net/xiayiye5/article/details/97025136
android ndk开发互调示例demo:包括java代码调用C,及C调用java。
android js 互调
Android和js的交互主要分为三种:1,安卓调用js的方法。2,js调用安卓的方法。3回调,即js调用安卓的方法获得数据,然后数据回传给js,js做业务处理。如有疑问可以看博客:...
在项目中有时候需要APP和H5之间相互调用方法来实现某些功能,本例子主要介绍Android和H5是怎么实现相互调用对方的方法。