Android组件之间交互核心Intent用法分析
本文实例讲述了android组件之间交互核心intent用法。分享给大家供大家参考,具体如下:
从一个activity启动到另一个activity可以使用startactivity()方法或者是startactivityforresult()方法
第一种:直接启动一个activity
intent intent = new intent(main.this, secondactivity.class); startactivity(intent);
第二种:启动另一个activity并返回结果
作用:当从第二个activity回跳到前一个activity的时候,就不再需要使用startactivity,也就是说不用两次使用startactivity方法
startactivityforresult(intent intent, int requestcode)
intent 传给要跳转的activity的数据和动作
requestcode >=0就好,随便用于在onactivityresult()区别哪个子模块回传的数据,如果还有c.java ,d甚至e子模块的话,每个区分开不同的requestcode就好。
public class mainactivity extends activity { /** called when the activity is first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); //给按钮添加绑定的事件 button mybutton = (button)findviewbyid(r.id.mybutton); mybutton.settext("我的第一个button"); mybutton.setonclicklistener(new onclick()); } @override protected void onactivityresult(int requestcode, int resultcode, intent data) { system.out.println(requestcode); system.out.println(resultcode); } public class onclick implements onclicklistener{ @override public void onclick(view v) { //生成一个intent对象 intent intent = new intent(); intent.putextra("testintent", "testextra"); intent.setclass(mainactivity.this,secondactivity.class); //直接启动一个activity // startactivity(intent); //启动一个有返回值的activity startactivityforresult(intent, 2); } } }
setresut(int resultcode, intent intent)
resultcode如果跳转的activity子模块可能有几种不同的结果返回,可以用这个参数予以识别区分。这里还有个特殊的result_ok值,没有特殊情况用它就好了,sdk有说明的。
intent 继续不解释,传回给a的onactivityresult()
这里三个都不用解释了,与上文对应的东西。如果不对requestcode和resultcode 加以识别区分的话,只要有其他activity setresult到了a onactivityresult()会无差别处理
public class secondactivity extends activity{ @override protected void oncreate(bundle savedinstancestate) { // todo auto-generated method stub super.oncreate(savedinstancestate); this.setcontentview(r.layout.other); button btn = (button)findviewbyid(r.id.otherbutton); btn.setonclicklistener(new button.onclicklistener(){ @override public void onclick(view v) { intent intent = getintent(); setresult(3, intent); finish(); } }); } }
如何使用自定义的action属性?
1、定义一个自定义的action名称——常量
public static final string my_action = "hb.com.my_action";
2、使用一个按钮然后给其绑定事件,让它跳转到另一个activity
myactionbtn.setonclicklistener(new button.onclicklistener(){ @override public void onclick(view v) { system.out.println("myactionbtn"); // intent intent = getintent(); // 这里一定要new一个intent对象,如果用上面的则打开的是当前的activity intent intent = new intent(); intent.setaction(my_action); startactivity(intent); } });
3、在androidmanifest.xml配置文件中添加activity的名称
<activity android:name=".secondactivity" android:label="@string/secondactivity"> <intent-filter> <action android:name="hb.com.my_action" /> <category android:name="android.intent.category.default" /> </intent-filter> </activity>
备注:hb.com.my_action这个值与intent.setaction(my_action);值是一样的
activity标签在application标签内部
category这个属性在intent filter中必须出现,否则不能测试通过
intent的data属性是指定动作的uri和mime类型,不同的action有不同的data数据指定
intent中的category属性是一个执行action的附加信息
intent的extras属性是添加一些组件的附加信息
//显示_id为1的联系人信息 data = "content://contacts/people/1"; uri = uri.parse(data); //action_view显示数据给用户 intent.setaction(intent.action_view); intent.setdata(uri); startactivity(intent); //编辑_id为1的联系人信息 data = "content://contacts/people/1"; uri = uri.parse(data); //action_edit显示可编辑数据 intent.setaction(intent.action_edit); intent.setdata(uri); startactivity(intent); //显示拨打电话的界面 data = "tel:13811111111"; uri = uri.parse(data); //action_dial显示拨打电话的面板 intent.setaction(intent.action_dial); intent.setdata(uri); startactivity(intent); //直接拨打电话 data = "tel:13811111111"; uri = uri.parse(data); //action_call直接打电话 intent.setaction(intent.action_call); intent.setdata(uri); startactivity(intent); //访问浏览器 data = "http://www.baidu.com"; uri = uri.parse(data); //action_view显示数据给用户 intent.setaction(intent.action_view); intent.setdata(uri); startactivity(intent); //访问地图 data = "geo://39.92,116.46"; uri = uri.parse(data); //action_view显示数据给用户 intent = new intent(intent.action_view,uri); startactivity(intent);
<intent-filter>列表中的action不能为空,否则程序阻塞不能通过。
如果intent对象指定了一个action属性,那么要想通过action测试,intent对象指定的属性必须和intent filter中的匹配,否则不能通过测试。
如果intent对象中没有指定action属性,则自动通过测试。
更多关于android相关内容感兴趣的读者可查看本站专题:《android文件操作技巧汇总》、《android编程开发之sd卡操作方法汇总》、《android开发入门与进阶教程》、《android资源操作技巧汇总》、《android视图view技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。