当前位置: 移动技术网 > 移动技术>移动开发>Android > Android组件之间交互核心Intent用法分析

Android组件之间交互核心Intent用法分析

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文实例讲述了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()

复制代码 代码如下:
onactivityresult(int requestcode, int resultcode, intent intent)

这里三个都不用解释了,与上文对应的东西。如果不对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程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网