zoukankan      html  css  js  c++  java
  • android intent

    Intent的中文意思是“意图,目的”的意思,可以理解为不同组件之间通信的“媒介”或者“信使”。
    Intent在寻找目标组件的时候有两种方法:第一,通过组件名称直接指定;第二,通过Intent Filter过滤指定
    Intent 启动不同组件的方法
       组件名称                 方法名称
       Activity                 startActivity()
                                startActivityForResult()
       Service                  startService()
                                bindService()
       Broadcasts               sendBroadcast()
                                sendOrderedBroadcast()
                                sendStickyBroadcast()

    组件间传递数据

      1)Bundle
        intent.putExtras(bundle)
        bundle.putXxx(String key, Xxx data)
        bundle.putSerializable(String key, Serializable data)
        intent=getInten()
        bundle=intent.getExtras()
        xxx=bundle.getXxx()
      2) sub-Activity
        startActivityForResult(Intent intent,int requestCode)
        onActivityResult(int requestCode,int resultCode,Intent intent)

    显式Intent定义:对于明确指出了目标组件名称的Intent,我们称之为显式Intent。显式Intent直接用组件的名称定义目标组件,这种方式很直接。但是由于开发人员往往并不清楚别的应用程序的组件名称,因此,显式Intent更多用于在应用程序内部传递消息。比如在某应用程序内,一个Activity启动一个Service。
    隐式Intent定义:对于没有明确指出目标组件名称的Intent,则称之为隐式Intent。它不会用组件名称定义需要激活的目标组件,它更广泛地用于在不同应用程序之间传递消息.由于没有明确的目标组件名称,所以必须由Android系统帮助应用程序寻找与Intent请求意图最匹配的组件。

    先演示个显示启动的,这个程序用了2个Activity,一个java文件,两个布局文件。

    第一步:修改布局文件main.xml,具体代码如下

    View Code
     1 <?xml version="1.0" encoding="utf-8"?>
    2 <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3 android:layout_width="fill_parent"
    4 android:layout_height="fill_parent"
    5 >
    6 <TextView
    7 android:layout_width="fill_parent"
    8 android:layout_height="wrap_content"
    9 android:text="请输入您的注册信息"
    10 android:textSize="20sp"
    11 />
    12 <TableRow>
    13 <TextView
    14 android:layout_width="fill_parent"
    15 android:layout_height="wrap_content"
    16 android:text="用户名 :"
    17 android:textSize="16sp"
    18 />
    19 <!-- 定义一个EditText,用于收集用户的帐号 -->
    20 <EditText
    21 android:id="@+id/name"
    22 android:layout_width="fill_parent"
    23 android:layout_height="wrap_content"
    24 android:hint="请填写想注册的帐号"
    25 android:selectAllOnFocus="false"
    26 />
    27 </TableRow>
    28 <TableRow>
    29 <TextView
    30 android:layout_width="fill_parent"
    31 android:layout_height="wrap_content"
    32 android:text="密码 :"
    33 android:textSize="16sp"
    34 />
    35 <!-- 用于收集用户的密码 -->
    36 <EditText
    37 android:id="@+id/passwd"
    38 android:layout_width="fill_parent"
    39 android:layout_height="wrap_content"
    40 android:password="true"
    41 android:selectAllOnFocus="true"
    42 />
    43 </TableRow>
    44 <TableRow>
    45 <TextView
    46 android:layout_width="fill_parent"
    47 android:layout_height="wrap_content"
    48 android:text="性别 :"
    49 android:textSize="16sp"
    50 />
    51 <!-- 定义一组单选框,用于收集用户注册的性别 -->
    52 <RadioGroup
    53 android:layout_width="fill_parent"
    54 android:layout_height="wrap_content"
    55 android:orientation="horizontal"
    56 >
    57 <RadioButton
    58 android:id="@+id/male"
    59 android:layout_width="wrap_content"
    60 android:layout_height="wrap_content"
    61 android:text="男"
    62 android:textSize="16sp"
    63 />
    64 <RadioButton
    65 android:id="@+id/female"
    66 android:layout_width="wrap_content"
    67 android:layout_height="wrap_content"
    68 android:text="女"
    69 android:textSize="16sp"
    70 />
    71 </RadioGroup>
    72 </TableRow>
    73 <Button
    74 android:id="@+id/bn"
    75 android:layout_width="wrap_content"
    76 android:layout_height="wrap_content"
    77 android:text="注册"
    78 android:textSize="16sp"
    79 />
    80 </TableLayout>

    第二步:添加一个result的布局文件,代码如下:

    View Code
     1 <?xml version="1.0" encoding="utf-8"?>
    2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3 android:layout_width="fill_parent"
    4 android:layout_height="fill_parent"
    5 android:orientation="vertical"
    6 >
    7 <!-- 定义三个TextView,用于显示用户输入的数据 -->
    8 <TextView
    9 android:id="@+id/name"
    10 android:layout_width="fill_parent"
    11 android:layout_height="wrap_content"
    12 android:textSize="18sp"
    13 />
    14 <TextView
    15 android:id="@+id/passwd"
    16 android:layout_width="fill_parent"
    17 android:layout_height="wrap_content"
    18 android:textSize="18sp"
    19 />
    20 <TextView
    21 android:id="@+id/gender"
    22 android:layout_width="fill_parent"
    23 android:layout_height="wrap_content"
    24 android:textSize="18sp"
    25 />
    26 </LinearLayout>

    第二步:分别编写三个Acitvity,其中一个是Person类是继承了Serializable接口,可以做序列化用

    第一个主程序,主要是将数据传送到另一个Activity

    View Code
     1 package cn.shaoyangjiang.com;
    2
    3 import cn.edu.zwu.tel.R;
    4 import android.app.Activity;
    5 import android.content.Intent;
    6 import android.os.Bundle;
    7 import android.view.View;
    8 import android.view.View.OnClickListener;
    9 import android.widget.Button;
    10 import android.widget.EditText;
    11 import android.widget.RadioButton;
    12
    13 public class IntentBundleTest01Activity extends Activity
    14 {
    15
    16 public void onCreate(Bundle savedInstanceState)
    17 {
    18 super.onCreate(savedInstanceState);
    19 setContentView(R.layout.main);
    20 Button bn = (Button)findViewById(R.id.bn);
    21 bn.setOnClickListener(new OnClickListener()
    22 {
    23
    24 public void onClick(View v)
    25 {
    26 EditText name = (EditText)findViewById(R.id.name);
    27 EditText passwd = (EditText)findViewById(R.id.passwd);
    28 RadioButton male = (RadioButton)findViewById(R.id.male);
    29 String gender = male.isChecked() ? "男 " : "女";
    30 Person p = new Person(name.getText().toString()
    31 , passwd.getText().toString() , gender);
    32 //创建一个Bundle对象
    33 Bundle data = new Bundle();
    34 data.putSerializable("person", p);
    35 //创建一个Intent
    36 Intent intent = new Intent(IntentBundleTest01Activity.this
    37 , ResultActivity.class);
    38 intent.putExtras(data);
    39 //启动intent对应的Activity
    40 startActivity(intent);
    41
    42 }
    43 });
    44 }
    45 }

    第二个是ResultActivity.java文件,这个主要是用来接受数据,并且把数据显示出来

    View Code
     1 package cn.shaoyangjiang.com;
    2
    3 import cn.edu.zwu.tel.R;
    4 import android.app.Activity;
    5 import android.content.Intent;
    6 import android.os.Bundle;
    7 import android.widget.TextView;
    8
    9 public class ResultActivity extends Activity
    10 {
    11 @Override
    12 public void onCreate(Bundle savedInstanceState)
    13 {
    14 super.onCreate(savedInstanceState);
    15 setContentView(R.layout.result);
    16 TextView name = (TextView)findViewById(R.id.name);
    17 TextView passwd = (TextView)findViewById(R.id.passwd);
    18 TextView gender = (TextView)findViewById(R.id.gender);
    19 //获取启动该Result的Intent
    20 Intent intent = getIntent();
    21 //获取该intent所携带的数据
    22 Bundle data = intent.getExtras();
    23 //从Bundle数据包中取出数据
    24 Person p = (Person)data.getSerializable("person");
    25 name.setText("您的用户名为:" + p.getName());
    26 passwd.setText("您的密码为:" + p.getPass());
    27 gender.setText("您的性别为:" + p.getGender());
    28 }
    29 }

    第三个是 Person.java这个类,主要是做序列化用

    View Code
     1 package cn.shaoyangjiang.com;
    2
    3 import java.io.Serializable;
    4
    5 public class Person implements Serializable
    6 {
    7
    8 private static final long serialVersionUID = 1L;
    9
    10 private Integer id;
    11 private String name;
    12 private String pass;
    13 private String gender;
    14 //构造方法
    15 public Person()
    16 {
    17 }
    18 //方法的覆盖
    19 public Person(String name, String pass, String gender)
    20 {
    21 this.name = name;
    22 this.pass = pass;
    23 this.gender = gender;
    24 }
    25 public Integer getId()
    26 {
    27 return id;
    28 }
    29 public void setId(Integer id)
    30 {
    31 this.id = id;
    32 }
    33 public String getName()
    34 {
    35 return name;
    36 }
    37 public void setName(String name)
    38 {
    39 this.name = name;
    40 }
    41 public String getPass()
    42 {
    43 return pass;
    44 }
    45 public void setPass(String pass)
    46 {
    47 this.pass = pass;
    48 }
    49 public String getGender()
    50 {
    51 return gender;
    52 }
    53 public void setGender(String gender)
    54 {
    55 this.gender = gender;
    56 }
    57
    58 }

    还要注意的是这2个Activity要在androidmainfest.xml文件里注册

    效果图:

    演示第二个程序:在子Activity中返回数据到主Acitvity

    这里用到了三个Activity和三个布局文件,都相对比较简单。主要知道下面这种方法

     sub-Activity
       startActivityForResult(Intent intent,int requestCode)
       onActivityResult(int requestCode,int resultCode,Intent intent)

    首先第一步,修改main.xml布局文件,用来显示主界面,还有subActivity1.xml和subActivity2.xml布局

    View Code
     1 <?xml version="1.0" encoding="utf-8"?>
    2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3 android:orientation="vertical"
    4 android:layout_width="fill_parent"
    5 android:layout_height="fill_parent"
    6 >
    7 <TextView
    8 android:id="@+id/textShow"
    9 android:layout_width="fill_parent"
    10 android:layout_height="wrap_content"
    11 android:text=""
    12 />
    13 <Button
    14 android:id="@+id/btn1"
    15 android:layout_width="wrap_content"
    16 android:layout_height="wrap_content"
    17 android:text="启动Activity1"
    18 />
    19 <Button
    20 android:id="@+id/btn2"
    21 android:layout_width="wrap_content"
    22 android:layout_height="wrap_content"
    23 android:text="启动Activity2"
    24 />
    25 </LinearLayout>

    subActivity1.xml

    View Code
     1 <?xml version="1.0" encoding="utf-8"?>
    2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3 android:orientation="vertical"
    4 android:layout_width="fill_parent"
    5 android:layout_height="fill_parent"
    6 >
    7 <TextView
    8 android:id="@+id/textShow"
    9 android:layout_width="fill_parent"
    10 android:layout_height="wrap_content"
    11 android:text="SubActivity 1"
    12 />
    13 <EditText
    14 android:id="@+id/edit"
    15 android:layout_width="fill_parent"
    16 android:layout_height="wrap_content"
    17 android:text=""
    18 />
    19 <Button
    20 android:id="@+id/btn_ok"
    21 android:layout_width="100dip"
    22 android:layout_height="wrap_content"
    23 android:text="接受"
    24 />
    25 <Button
    26 android:id="@+id/btn_cancel"
    27 android:layout_width="100dip"
    28 android:layout_height="wrap_content"
    29 android:text="撤销"
    30 />
    31 />
    32 </LinearLayout>

    subActivity2.xml

    View Code
     1 <?xml version="1.0" encoding="utf-8"?>
    2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3 android:orientation="vertical"
    4 android:layout_width="fill_parent"
    5 android:layout_height="fill_parent"
    6 >
    7 <TextView
    8 android:id="@+id/textShow"
    9 android:layout_width="fill_parent"
    10 android:layout_height="wrap_content"
    11 android:text="SubActivity 2"
    12 />
    13 <Button
    14 android:id="@+id/btn_return"
    15 android:layout_width="100dip"
    16 android:layout_height="wrap_content"
    17 android:text="关闭"
    18 />
    19 </LinearLayout>

    第二步:编写主文件IntentTest02Activity.java文件

    View Code
     1 package cn.shaoyangjiang.com;
    2
    3 import cn.edu.zwu.tel.R;
    4 import android.app.Activity;
    5 import android.content.Intent;
    6 import android.net.Uri;
    7 import android.os.Bundle;
    8 import android.view.View;
    9 import android.view.View.OnClickListener;
    10 import android.widget.Button;
    11 import android.widget.TextView;
    12
    13 public class IntentTest02Activity extends Activity {
    14 private static final int SUBACTIVITY1 = 1;
    15 private static final int SUBACTIVITY2 = 2;
    16
    17 TextView textView;
    18
    19 /** Called when the activity is first created. */
    20 @Override
    21 public void onCreate(Bundle savedInstanceState) {
    22 super.onCreate(savedInstanceState);
    23 setContentView(R.layout.main);
    24
    25 textView = (TextView)findViewById(R.id.textShow);
    26 final Button btn1 = (Button)findViewById(R.id.btn1);
    27 final Button btn2 = (Button)findViewById(R.id.btn2);
    28
    29 btn1.setOnClickListener(new OnClickListener(){
    30 public void onClick(View view){
    31 Intent intent = new Intent(IntentTest02Activity.this, SubActivity1.class);
    32 startActivityForResult(intent, SUBACTIVITY1);
    33 }
    34 });
    35
    36 btn2.setOnClickListener(new OnClickListener(){
    37 public void onClick(View view){
    38 Intent intent = new Intent(IntentTest02Activity.this, SubActivity2.class);
    39 startActivityForResult(intent, SUBACTIVITY2);
    40 }
    41 });
    42 }
    43
    44 @Override
    45 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    46 super.onActivityResult(requestCode, resultCode, data);
    47
    48 switch(requestCode){
    49 case SUBACTIVITY1:
    50 if (resultCode == RESULT_OK){
    51 Uri uriData = data.getData();
    52 textView.setText(uriData.toString());
    53 }
    54 break;
    55 case SUBACTIVITY2:
    56 break;
    57 }
    58 }
    59 }

    编写SubActivity1.java文件

    View Code
     1 package cn.shaoyangjiang.com;
    2
    3 import cn.edu.zwu.tel.R;
    4 import android.app.Activity;
    5 import android.content.Intent;
    6 import android.net.Uri;
    7 import android.os.Bundle;
    8 import android.view.View;
    9 import android.view.View.OnClickListener;
    10 import android.widget.Button;
    11 import android.widget.EditText;
    12
    13 public class SubActivity1 extends Activity {
    14
    15 @Override
    16 public void onCreate(Bundle savedInstanceState) {
    17 super.onCreate(savedInstanceState);
    18 setContentView(R.layout.subactivity1);
    19
    20 final EditText editText = (EditText)findViewById(R.id.edit);
    21 Button btnOK = (Button)findViewById(R.id.btn_ok);
    22 Button btnCancel = (Button)findViewById(R.id.btn_cancel);
    23
    24 btnOK.setOnClickListener(new OnClickListener(){
    25 public void onClick(View view){
    26 String uriString = editText.getText().toString();
    27 Uri data = Uri.parse(uriString);
    28
    29 Intent result = new Intent(null, data);
    30
    31 setResult(RESULT_OK, result);
    32 finish();
    33 }
    34 });
    35
    36 btnCancel.setOnClickListener(new OnClickListener(){
    37 public void onClick(View view){
    38 setResult(RESULT_CANCELED, null);
    39 finish();
    40 }
    41 });
    42 }
    43 }

    SubActivity2.java文件

    View Code
     1 package cn.shaoyangjiang.com;
    2
    3 import cn.edu.zwu.tel.R;
    4 import android.app.Activity;
    5 import android.os.Bundle;
    6 import android.view.View;
    7 import android.view.View.OnClickListener;
    8 import android.widget.Button;
    9
    10 public class SubActivity2 extends Activity {
    11 /** Called when the activity is first created. */
    12 @Override
    13 public void onCreate(Bundle savedInstanceState) {
    14 super.onCreate(savedInstanceState);
    15 setContentView(R.layout.subactivity2);
    16
    17 Button btnReturn = (Button)findViewById(R.id.btn_return);
    18
    19 btnReturn.setOnClickListener(new OnClickListener(){
    20 public void onClick(View view){
    21 setResult(RESULT_CANCELED, null);
    22 finish();
    23 }
    24 });
    25 }
    26 }

    这些代码思路都很清晰,比较简单,也比较有用

    效果图:










     

  • 相关阅读:
    Atlassian In Action-Jira之核心配置(二)
    mybatis的插入与批量插入的返回ID的原理
    Atlassian In Action-Jira之指导思想(一)
    Atlassian In Action
    如何进行软件技术管理?
    [simple-orm-mybaits]基于Mybatis的ORM封装介绍
    Java利用Mybatis进行数据权限控制
    给大家推荐一个Java学习和面试的GitHub项目
    立志
    一勤天下无难事
  • 原文地址:https://www.cnblogs.com/shaoyangjiang/p/2373939.html
Copyright © 2011-2022 走看看