欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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类型的参数)

     Android Intent封装的实例详解Android Intent封装的实例详解

第一个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中参数漏掉一个有可能引起程序奔溃。那么如何避免这种情况呢:

  1. 参数是第二个activity所需的,那么为何不由他来进行参数设定呢。按照它的规范来
  2. 将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()传入相应的参数即可。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

上一篇:

下一篇: