目录

  • 1 第一周 android简介
    • 1.1 第一课 Android基础入门1
    • 1.2 第二课 Android基础入门2
    • 1.3 第三课 Android UI开发介绍
  • 2 第二周 android布局
    • 2.1 第一课 Android 布局文件介绍1
    • 2.2 第二课 Android 布局文件介绍2
    • 2.3 第三课 Android 布局文件介绍3
  • 3 第三周 Android UI组件开发
    • 3.1 第一课 Button和ImageButton
    • 3.2 第二课 TextView和EditText
    • 3.3 第三课 RadioButton和CheckBox
  • 4 第四周 Android UI组件开发
    • 4.1 第一课 Spinner和ListView
    • 4.2 第二课 应用案例-手机信息页面
    • 4.3 第三课 Android生命周期
  • 5 第五周 Android组件通信
    • 5.1 第一课 Intent的介绍
    • 5.2 第二课 Intent实现各种系统功能
    • 5.3 第三课 应用案例-手机注册页面
  • 6 第六周 数据存储
    • 6.1 第一课 应用案例-新建联系人
    • 6.2 第二课 数据存储-简单文件存储
    • 6.3 第三课 SharedPreferences存储
  • 7 第七周 数据存储
    • 7.1 第一课 xml文件存储
    • 7.2 第二课 应用案例-植物百科
    • 7.3 第三课  ListView 组件高级使用
  • 8 第八周 SQLite数据库
    • 8.1 第一课 应用案例-应用列表
    • 8.2 第二课 使用SQLite数据库存储(创建数据库和表)
    • 8.3 第三课 使用SQLite数据库存储(对表数据操作)
  • 9 第九周 项目实战-商品购物车处理
    • 9.1 第一课 使用SQLite数据库存储(对表数据查询)
    • 9.2 第二课 商品购物车处理(布局)
    • 9.3 第三课 商品购物车处理(数据处理)
  • 10 第十周 内容提供者及广播
    • 10.1 第一课 内容提供者的使用
    • 10.2 第二课 广播概念以及如何使用
    • 10.3 第三课 自定义广播
  • 11 第十一周 广播和服务
    • 11.1 第一课 应用案例-电池电量
    • 11.2 第二课 应用案例-通话记录
    • 11.3 第三课 服务简介
  • 12 第十二周 服务应用
    • 12.1 第一课 应用案例—音乐播放器
    • 12.2 第二课 应用案例—地震监测
    • 12.3 第三课 获得手机SIM卡信息
  • 13 第十三周 网络编程
    • 13.1 第一课 网络编程入门
    • 13.2 第二课 使用HttpClient访问网络
    • 13.3 第三课 webview组件
  • 14 第十四周 网络编程应用案例
    • 14.1 第一课 消息机制简介
    • 14.2 第二课 应用案例-应用升级
    • 14.3 第三课 应用案例-应用升级
第一课 应用案例-新建联系人

新建联系人

一、案例描述

1、考核知识点

    回传数据

    显示意图和隐式意图

2、练习目标

        掌握Activity之间回传数据的功能

        掌握Activity隐式意图的使用

3、需求分析

在Android系统中,不仅需要把数据传递给不同页面,也经常会打开一个新的页面,把新页面中的数据回传给调用者。传递数据与回传数据同样使用的都是Intent对象。

4、设计思路(实现原理)

1)  创建主界面MainActivity,该Activity有一个Button按钮,点击进入第二个页面并将第二个页面的数据显示在界面上。

2)  创建第二个界面SecondActivity,该Activity主要用于输入信息、从图库选择图片并将数据回传给MainActivity。 

二、案例实现

1)新建联系人程序

创建“新建联系人”程序,首先创建第一个Activity用于显示信息,该程序的界面如图3-4所示。

图3-4       主界面

主界面对应的布局文件(activity_main)如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity" >

    <RelativeLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_margin="20dp" >

        <ImageView

            android:id="@+id/ic_head"

            android:layout_width="80dp"

            android:layout_height="80dp"

            android:src="@drawable/ic_launcher" />

        <TextView

            android:id="@+id/tv_email"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_alignLeft="@+id/tv_phone"

            android:layout_below="@+id/tv_phone"

            android:layout_marginTop="15dp"

            android:text="email: "

            android:textSize="18dp" />

        <TextView

            android:id="@+id/tv_name"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_alignBottom="@+id/ic_head"

            android:layout_marginBottom="21dp"

            android:layout_marginLeft="14dp"

            android:layout_toRightOf="@+id/ic_head"

            android:text="姓名"

            android:textSize="18dp" />

        <TextView

            android:id="@+id/tv_phone"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_below="@+id/ic_head"

            android:layout_marginTop="22dp"

            android:text="电话: "

            android:textSize="18dp" />

    </RelativeLayout>

    <Button

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentBottom="true"

        android:layout_centerHorizontal="true"

        android:layout_marginBottom="22dp"

        android:onClick="click"

        android:text="新建联系人" />

</RelativeLayout>


MainActivity的代码如下所示:

 1   public class MainActivity extends Activity {

 2       private TextView tv_name, tv_email, tv_phone;

 3       private ImageView iv_head;

 4       private String name;

 5       private String email;

 6       private byte[] imageByte;

 7       private Bitmap bitmap;

 8       private String phone_et;

 9       @Override

 10      protected void onCreate(Bundle savedInstanceState) {

 11          super.onCreate(savedInstanceState);

 12          setContentView(R.layout.activity_main);

 13   

 14          tv_name = (TextView) findViewById(R.id.tv_name);

 15          tv_email = (TextView) findViewById(R.id.tv_email);

 16          tv_phone = (TextView) findViewById(R.id.tv_phone);

 17          iv_head = (ImageView) findViewById(R.id.iv_head);

 18      }

 19      public void click(View view) {

 20          Intent intent = new Intent(this, SecondActivity.class);

 21          startActivityForResult(intent, 1);

 22      }

 23      @Override

 24      protected void onActivityResult(int requestCode, int resultCode,

 25           Intent data) {

 26          super.onActivityResult(requestCode, resultCode, data);

 27          if (data != null) {

 28              if (resultCode == 1) {

 29                  if (requestCode == 1) {

 30                      try {

 31                          name = data.getStringExtra("name");

 32                          email = data.getStringExtra("email");

 33                          phone_et = data.getStringExtra("phone");

 34                          imageByte = data.getByteArrayExtra("image");

 35                          bitmap = BitmapFactory.decodeByteArray(imageByte,

 36                                  0, imageByte.length);

 37                      } catch (Exception e) {

 38                      }

 39                      if (name != null) {

 40                          tv_name.setText("姓名    :" + name);

 41                      }

 42                      if (email != null) {

 43                          tv_email.setText("email :" + email);

 44                      }

 45                      if (phone_et != null) {

 46                          tv_phone.setText("电话号码   :" + phone_et);

 47                      }

 48                      if (bitmap != null) {

 49                          iv_head.setImageBitmap(bitmap);

 50                      }

 51                  }

 52              }

 53          }

 54      }

 55  }


2SecondActivity布局

       创建SecondActivity类的布局activity_second.xml,该布局包含四个EditText ,second.xml所对应界面如图3-5所示。

图3-5       选择联系人界面

activity_second.xml布局文件如下所示:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    <RelativeLayout

        android:id="@+id/rl_head"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:background="#F0EDE5" >

        <TextView

            android:id="@+id/tv_head"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_margin="15dp"

            android:text="新建联系人"

            android:textColor="#86743f" />

        <View

            style="@style/view_wire"

            android:layout_alignParentLeft="true"

            android:layout_below="@+id/tv_head" />

    </RelativeLayout>

    <RelativeLayout

        android:id="@+id/rl_user"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_below="@+id/rl_head"

        android:background="#e6e6e6" >

        <ImageView

            android:id="@+id/iv_select"

            android:layout_width="80dp"

            android:layout_height="80dp"

            android:layout_marginTop="10dp"

            android:paddingBottom="10dp"

            android:src="@drawable/ic_launcher" />

        <EditText

            android:id="@+id/et_company"

            style="@style/edtTxtStyle"

            android:layout_alignBottom="@+id/iv_select"

            android:layout_alignParentRight="true"

            android:layout_marginBottom="10dp"

            android:layout_toRightOf="@+id/iv_select"

            android:ems="10"

            android:hint="公司或标签" />

        <EditText

            android:id="@+id/et_name"

            style="@style/edtTxtStyle"

            android:layout_alignLeft="@+id/et_company"

            android:layout_alignTop="@+id/iv_select"

            android:ems="10"

            android:hint="姓名" >

            <requestFocus />

        </EditText>

        <View

            style="@style/view_wire"

            android:layout_alignLeft="@+id/et_name"

            android:layout_centerVertical="true" />

    </RelativeLayout>

    <View

        android:id="@+id/view_wire3"

        android:layout_width="match_parent"

        android:layout_height="1dp"

        android:layout_alignParentLeft="true"

        android:layout_below="@+id/tv_telephoneHint"

        android:layout_marginLeft="10dp"

        android:layout_marginRight="10dp"

        android:layout_marginTop="5dp"

        android:background="#e3e0d8" />

    <TextView

        android:id="@+id/tv_telephoneHint"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_below="@+id/rl_user"

        android:layout_marginLeft="18dp"

        android:layout_marginTop="20dp"

        android:text="电话" />

    <TextView

        android:id="@+id/tv_phoneHint"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_below="@+id/view_wire3"

        android:layout_marginLeft="18dp"

        android:layout_marginTop="20dp"

        android:text="手机    :" />

    <View

        android:id="@+id/view_wire4"

        style="@style/view_wire"

        android:layout_alignParentLeft="true"

        android:layout_below="@+id/tv_emailHint"

        android:layout_marginLeft="10dp"

        android:layout_marginRight="10dp"

        android:layout_marginTop="5dp" />

    <TextView

        android:id="@+id/tv_emailHint"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_below="@+id/tv_phoneHint"

        android:layout_marginLeft="18dp"

        android:layout_marginTop="30dp"

        android:text="邮箱" />

    <TextView

        android:id="@+id/tv_firmHint"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_below="@+id/view_wire4"

        android:layout_marginLeft="18dp"

        android:layout_marginTop="20dp"

        android:text="公司    :" />

    <EditText

        android:id="@+id/et_email"

        style="@style/edtTxtStyle"

        android:layout_alignBottom="@+id/tv_firmHint"

        android:layout_alignLeft="@+id/et_phone"

        android:ems="10"

        android:hint="电子邮件"

        android:inputType="textEmailAddress" />

    <RelativeLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_alignParentBottom="true"

        android:layout_alignParentLeft="true"

        android:background="#000000" >

        <Button

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_alignParentRight="true"

            android:layout_centerVertical="true"

            android:layout_marginRight="25dp"

            android:layout_marginTop="20dp"

            android:onClick="complete"

            android:text="完成"

            android:textSize="18dp" />

    </RelativeLayout>

    <EditText

        android:id="@+id/et_phone"

        style="@style/edtTxtStyle"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignBottom="@+id/tv_phoneHint"

        android:layout_alignRight="@+id/view_wire3"

        android:ems="10"

        android:hint="电话号码"

        android:inputType="phone" />

</RelativeLayout>


其中ViewEditText的属性抽取出做单独样式,如下所示:

    <style name="edtTxtStyle" parent="android:Widget.Holo.Light.EditText">

        <item name="android:background">@null</item>

        <item name="android:layout_width">wrap_content</item>

        <item name="android:layout_height">wrap_content</item>

    </style>

    <style name="view_wire">

        <item name="android:background">#e3e0d8</item>

        <item name="android:layout_width">match_parent</item>

        <item name="android:layout_height">1dp</item>

    </style>


3SecondActivity

创建好联系人信息界面后创建一个SecondAcitivty.java,该类主要完成信息的输入、图片选择和数据的回传功能:

public class SecondActivity extends Activity {

    private EditText et_name, et_phone, et_email;

    private ImageView select_ico;

    private byte[] bitmapToBytes;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_second);

        et_name = (EditText) findViewById(R.id.et_name);

        et_phone = (EditText) findViewById(R.id.et_phone);

        et_email = (EditText) findViewById(R.id.et_email);

        select_ico = (ImageView) findViewById(R.id.iv_select);

        select_ico.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View v) {

                Intent i = new Intent(

                        Intent.ACTION_PICK,

                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

                startActivityForResult(i, 1);

            }

        });

    }

    public void complete(View view) {

        String name = et_name.getText().toString().trim();

        String phone = et_phone.getText().toString().trim();

        String email = et_email.getText().toString().trim();

        Intent intent = new Intent();

        intent.putExtra("name", name);

        intent.putExtra("phone", phone);

        intent.putExtra("email", email);

        intent.putExtra("image", bitmapToBytes);

        setResult(1, intent);

        this.finish();

    }

    private byte[] Bitmap2Bytes(Bitmap bm) {

        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);

        return baos.toByteArray();

    }

    @Override

    protected void onActivityResult(int requestCode, int resultCode,

Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 1 && resultCode == RESULT_OK && null != data) {

            Uri selectedImage = data.getData();

            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            Cursor cursor = getContentResolver().query(selectedImage,

                    filePathColumn, null, null, null);

            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);

            String picturePath = cursor.getString(columnIndex);

            cursor.close();

            select_ico.setImageBitmap(BitmapFactory.decodeFile(picturePath));

            Bitmap image = ((BitmapDrawable) select_ico.getDrawable())

                    .getBitmap();

            bitmapToBytes = Bitmap2Bytes(image);

        }

    }

}


3)运行程序

运行“新建联系人”程序,结果如图3-6所示。

图3-6       主界面

点击新建联系人按钮,打开输入信息界面并输入姓名、公司、电话号码、电子邮件并点击头像进入系统图库选择一张图片,如图3-7的左图所示。填写之后点击完成按钮将数据回传给MainActivity,如图3-7的右图所示。

  

图3-7       Activity回传数据

 

三、案例总结

1、使用Activity回传数据需要用到startActivityForResult打开新的Activity

2、回传数据界面需要设置setResult();方法设置结果数据并指定数据存放在Intent对象中。