Android Intent封装的实例详解
程序员文章站
2023-12-13 19:15:22
android intent封装的实例详解
什么是intent:
intent是协调应用间、组件之间的通讯和交互。通过intent你可以启动activity、servi...
android intent封装的实例详解
什么是intent:
intent是协调应用间、组件之间的通讯和交互。通过intent你可以启动activity、service、broadcasts。更可以跨程序调用第三方组件。例如:启动拨打电话界面、音乐播放等。
组件 | 启动 |
activity | startacticity() |
service | startservice(),bindservice( ) |
broadcasts | sendbroadcast() |
使用intent:
栗子:在一个activity中添加一个点击按钮->点击启动第二个activity(需要两个string类型的参数)
第一个activity的按钮点击代码:
public void onclick(view view){ intent intent=new intent(this,main2activity.class); intent.putextra("text1","xiaoming"); intent.putextra("text2","中国人"); startactivity(intent); }
第二个activity接受intent数据代码:
protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main2); butterknife.bind(this); initview(); } private void initview() { string text1 = getintent().getstringextra("text1"); string text2 = getintent().getstringextra("text2"); mtextview.settext(text1); mtextview2.settext(text2); }
这是常见的intent的使用,但是它存在这很大弊端。假如你的项目越来越多,你在启动第二个activity中参数漏掉一个有可能引起程序奔溃。那么如何避免这种情况呢:
- 参数是第二个activity所需的,那么为何不由他来进行参数设定呢。按照它的规范来
- 将intent的实例交给第二个activity。它更需要这个方法的封装。也就是开闭原则
另一种思路代码实现:
第一个activity的按钮点击代码:
public void onclick(view view){ //调用第二个activity封装好的intent intent intent = main2activity.newintent(mainactivity.this, "hsis", "wodhis"); startactivity(intent); }
第二个activity的代码:
public class main2activity extends appcompatactivity { private static final string intent_text1="intent_text1"; private static final string intent_text2="intent_text2"; private string text1,text2; @butterknife.bind(r.id.textview) textview mtextview; @butterknife.bind(r.id.textview2) textview mtextview2; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main2); butterknife.bind(this); initintent(); initview(); } public static intent newintent(activity activity,string te, string te2){ intent intent=new intent(activity,main2activity.class); intent.putextra(intent_text1,te); intent.putextra(intent_text2,te2); return intent; } private void initintent(){ text1=getintent().getstringextra(intent_text1); text2=getintent().getstringextra(intent_text2); } private void initview() { mtextview.settext(text1); mtextview2.settext(text2); } }
通过比较,很明显我们把intent需要的传参逻辑封装到所要启动的activity,这样的好处就是,按照我的规则来启动我。《我的规则我做主》。而且在其他地方启动main2activity时,直接调用newintent()传入相应的参数即可。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!