安卓开发-Activity的显示意图和隐式意图+实例+Activity界面间数据的传递实例
来源:互联网 发布:手机淘宝详情店铺活动 编辑:程序博客网 时间:2024/05/16 19:06
《一:显示意图和隐式意图》
1.显示意图
//想打开的页面需要在创建意图时显式指定要打开那个ActivityIntent intent = new Intent(this, 指定Activity.class);startActivity(intent);
2.隐式意图:没有说明要打开哪一个页面,而是通过匹配来确定怎么打开,若一个匹配就直接打开,多个匹配则以列表的形式选择打开(当应用只想和其他应用交互时才会用到)
第一种:只设置action
在开启方MainActivity中Intent intent = new Intent();//想启动某个页面,可以为页面配置一个ACTION属性(也可在意图构造器中传入action类型创建意图)intent.setAction("包名.action.自定义名称");startActivity(intent);
<!-- 1.被开启方AndroidManifest.xml中(对应activity中)--><intent-filter> <action android:name="包名.action.自定义名称" /> <!-- 2.本界面默认的页面,如果配置了一个或多个action标签,category标签必须配置 --> <category android:name="android.intent.category.DEFAULT" /></intent-filter>
第二种:intent.setAction()不是必须的,但是得配置dataAndType
开启方MainActivity中Intent intent = new Intent();//1.告诉系统想启动一个带有浏览器action的界面intent.setAction("android.intent.action.VIEW");//浏览器显示界面action//2.创建uri的型数据Uri data = Uri.parse(网址);//创建uri//3.告诉系统该展示成什么样的格式intent.setDataAndType(data, "text/html");//为意图设置data和typestartActivity(intent); 被开启方AndroidManifest.xml中(对应activity中)<intent-filter > <!-- 1.若请求uri(data)必须配置此action的值,sms可不配 --> <action android:name="android.intent.action.VIEW" /> <!-- 2.本界面默认的页面,如果配置了一个或多个action标签,category标签必须配置 --> <category android:name="android.intent.category.DEFAULT" /> <!-- 3.如果配置了data,则必须配置action,不管代码中是否有setAction --> <data android:mimeType="类型" android:scheme="网址头(如http)" android:host="主机地址" android:port="端口" android:path="子文件路径" /></intent-filter>
《二:界面间数据的传递【显式意图传值方式】(界面一到界面二)》
1.界面一中:
//1.创建意图时指定打开界面二Intent intent = new Intent(界面一的Activity.this, 界面二的Activity.class);//2.1为界面二的意图中设置需要传递的数据类型: 名称和值intent.putExtra(String name, dataTypeValue);//2.2为界面二的意图中设置需要传递的对象(对象必须实现序列化接口)intent.putExtra(String objName, obj);//3.启动意图startActivity(intent);
2.相应界面二中:
Intent intent = getIntent();//2.1直接指定数据类型获取值dataType name = (dataType) intent.getIntExtra(dataName, 无值返回);//2.2获取Extras再从中获取值dataType name = (dataType) intent.getExtras().get(dataName);//2.3获取实现序列化接口对象objType obj = (objType) intent.getExtras().getSerializable(objName)
《三:隐式意图实例-隐式浏览器和激活系统短信》(当应用只想和其他应用交互时才会用到)
(1)隐式浏览器 (目的:当用户点击一个网址时,选用自定义的webview打开(隐式弹出的列表选择),而不是系统自带的浏览器)
1.启动浏览器 查看启动Activity意图的日志。
图片
2.查看 浏览器 的源代码中的AndroidManifest.xml文件,找到对应的应用,复制相应的intent-filter配置到本项目的MainActivity的activity中.
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" /> <data android:scheme="https" /> <data android:scheme="about" /> <data android:scheme="javascript" /> </intent-filter>
3.在activity_main.xml中:
<EditText android:id="@+id/browser_et" android:layout_width="match_parent" android:layout_height="wrap_content" /> <WebView android:id="@+id/browser_wv" android:layout_width="match_parent" android:layout_height="match_parent" />
4.在MainActivity中,启用WebView:(查看BrowserActivity.java中搜索 getIntent 得启发)
EditText et = (EditText) findViewById(R.id.browser_et); WebView wv = (WebView) findViewById(R.id.browser_wv); Intent intent = getIntent(); Uri data = intent.getData(); if(data != null){ String uri = data.toString(); et.setText(uri); //1.某些网页控件默认不支持js,需手动设置打开 wv.getSettings().setJavaScriptEnabled(true); //2.加载Uri wv.loadUrl(uri); //3.解决跳转到新界面还需要打开新的浏览器问题,使用当前的即可 wv.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); //返回true表明告诉系统不要打开新的浏览器,自己处理 return true; } }); }
5.AndroidManifest.xml中配置网络访问权限:
(2)激活系统短信
Intent intent = new Intent(Intent.ACTION_VIEW);//系统信息发送界面View,可在创建意图时设置actionintent.setData(Uri.parse("sms:12345"));intent.putExtra("subject", "大众点评");intent.putExtra("sms_body", "快点发货,饿死了");startActivity(intent);
《四:开启新界面,获得新界面的返回值》(设置头像)
1.显式为得到一个结果而开启一个Activity(按钮点击事件,界面一)
public void chooseIconClick(View v){ Intent intent = new Intent(this, ChooseIconActivity.class); //1为requestCode,标识是哪一个页面会返回结果,对应onActivityResult中的参数 startActivityForResult(intent, 1); }
2.为每一张图片绑定一个点击监听器(界面二)
public class ChooseIconActivity extends Activity implements OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_choose_icon); findViewById(R.id.e0).setOnClickListener(this); findViewById(R.id.e1).setOnClickListener(this); findViewById(R.id.e2).setOnClickListener(this); findViewById(R.id.e3).setOnClickListener(this); } }
3.根据图片的id判断是哪张图片,将图片的id装入intent中作为result返回至请求界面(界面二)
public void onClick(View arg0) { Intent data = new Intent(); switch (arg0.getId()) { case R.id.e0: data.putExtra("icon", R.drawable.e0); break; case R.id.e1: data.putExtra("icon", R.drawable.e1); break; case R.id.e2: data.putExtra("icon", R.drawable.e2); break; case R.id.e3: data.putExtra("icon", R.drawable.e3); break; } //resultCode用于标识本页面返回值的类型,可能本页面会有多种类型的值, //对应startActivityForResult中的接收动作的参数 setResult(0, data); //必须关闭当前界面才能将意图传出 finish(); }
4.使用来自界面二的意图(数据)
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(data != null){ //为界面一中的ImageView设置图片 if(requestCode == 1){ iconIv.setImageResource(data.getIntExtra("icon", 0)); } }
5.小结:
(1)View.getId():可以得到id.
(2)开启一个Activity有两种形式:需要返回结果和不需要的。前者还需要函数 onActivityResult接收结果。
(3)resultCode在传值时用于标识本页面返回值的类型,requestCode标识是来自哪一个页面返回结果
(4)若要为多个View设置点击事件,采用在本类中事项setOnClickListener,这样只需要写一个函数判断不同的id即可。
(5)界面二的数据要传到界面一中,必须在界面二中调用finish(),不然界面二关闭不了,到不到界面一。
- 安卓开发-Activity的显示意图和隐式意图+实例+Activity界面间数据的传递实例
- android intent 隐式意图和显示意图(activity跳转)
- android intent 隐式意图和显示意图(activity跳转)
- 隐式意图的配置 →显示意图激活另外一个activity
- Android Intent意图用于Activity之间的数据传递
- Intent 意图 用于Activity之间的数据传递
- Intent意图 用于Activity之间的数据传递
- Intent 意图 用于Activity之间的数据传递
- Activity的显式意图激活和隐式意图激活
- intent 显式意图和隐式意图之Activity的激活方式
- 跳转界面Intent 显示意图和隐式意图的特点
- Intent中显示意图和隐式意图的用法
- Android 显示意图和隐式意图的区别
- Android 显示意图和隐式意图的区别
- 显示意图和隐式意图的使用场景
- Intent中显示意图和隐式意图的用法
- activity显示意图跳转
- Activity中Intent的含义以及显式意图与隐式意图区别
- Java 泛型详解
- 通过getGenericSuperclass获取子类参数类名,连接到mapper
- 一个技术小白的自述
- 天气预报接口api
- (android 源码下开发应用程序) 如何在 Android 各 level ( 包含 user space 與 kernel space ) 使用dump call stack的方法
- 安卓开发-Activity的显示意图和隐式意图+实例+Activity界面间数据的传递实例
- Android Studio-2.3 打包运行App报错问题
- W5500+网口开发板资料。硬件原理图
- Python graphics库详解
- PPT神技能,如何使用PPT制作炫酷视频?我想你还是不会吧!
- codevs 2622 数字序列 DP 解题报告
- linux 8-9
- mysql解压版安装
- C++ 引用与指针