Android(java)学习笔记165:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例的优化:请求码和结果码)

1.开启界面获取返回值

(1)采用一种特殊的方式开启Activity:

              startActivityForResult(intent , 0);

(2)在被开启的Activity里面设置数据:

              Intent data =  new Intent();

              data.putExtra("content", content);

              setResult(0, data);

备注:

public final void setResult(int resultCode,Intent data):它是Activity的方法,用于返回数据给上一个Activity的(跳转之前的Activity

(3)记得关闭新开启的界面:

               finish();

(4)在第一个Activity里面重写一个方法:

                    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                   //data 就是返回的Intent数据,里面包含有数据
                    }

(5)有两个参数 请求码 requestCode  resultCode (使用时候任选其中之一就行)

              区别请求 或者 结果的来源

 

2.短信助手案例的优化:(使用请求码

上一讲的短信助手的程序只是选择了短信的内容,显示生活中我们还必须有选择联系电话,这样我们才能发送数据。

(1)我们在activity_main.xml中添加选择联系电话的UI,如下:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     tools:context="com.himi.Smshelper.MainActivity" >
 7 
 8     <Button
 9         android:layout_width="match_parent"
10         android:layout_height="wrap_content"
11         android:onClick="select_contacts"
12         android:text="浏览选择联系人" />
13 
14     <EditText
15         android:id="@+id/et_phone"
16         android:layout_width="match_parent"
17         android:layout_height="wrap_content"
18         android:inputType="phone"
19         android:singleLine="true" />
20 
21     <Button
22         android:layout_width="match_parent"
23         android:layout_height="wrap_content"
24         android:onClick="select_Sms"
25         android:text="浏览选择短信" />
26 
27     <EditText
28         android:id="@+id/et_Sms"
29         android:layout_width="match_parent"
30         android:layout_height="wrap_content"
31         android:inputType="textMultiLine"
32         android:lines="6" />
33 
34 </LinearLayout>

布局效果如下:

 

(2)在MainActivity,修改代码如下:

 1 package com.himi.Smshelper;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.widget.EditText;
 8 
 9 public class MainActivity extends Activity {
10     private EditText et_Sms;
11     private EditText et_phone;
12     public static int GET_SMS = 1;//获取短信的内容请求码
13     public static int GET_PHONE = 2;//获取电话号码请求码
14 
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.activity_main);
19         et_Sms = (EditText) findViewById(R.id.et_Sms);
20         et_phone = (EditText) findViewById(R.id.et_phone);
21 
22     }
23     /**
24      * 选择短信内容
25      * @param view
26      */
27     public void select_Sms(View view) {
28         Intent intent = new Intent(this, SmsActivity.class);
29         // 直接打开新的界面
30         // startActivity(intent);
31         startActivityForResult(intent, GET_SMS);
32 
33     }
34     /**
35      * 选择联系人
36      * @param view
37      */
38     public void select_contacts(View view) {
39         Intent intent = new Intent(this, ContactActivity.class);
40         // 直接打开新的界面
41         // startActivity(intent);
42         startActivityForResult(intent, GET_PHONE);
43     }
44     
45     /**
46      *返回数据  当我们开启的Activity关闭的时候(这里我们开启的就是SmsActivity),SmsActivity关闭之后调用这个方法
47      */
48     @Override
49     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
50         
51         if (requestCode == GET_SMS) {
52             if (data != null) {
53                 String context = data.getStringExtra("context");
54                 et_Sms.setText(context);
55             }
56         }else {
57             String context = data.getStringExtra("phone");
58             et_phone.setText(context);
59         }
60         super.onActivityResult(requestCode, resultCode, data);
61     }
62     
63 }

这里的startActivityForResult(Intent intent, int requestCode)  与 onActivityResult(int requestCode, int resultCode, Intent data)

第一个参数:intent是意图(这里就是打开相应的Activity);

第二个参数:requestCode是请求码;

这里定义两个请求码分别为:GET_SMS 与 GET_PHONE 

GET_SMS:表示是MainActivity切换到SmsActivity的请求码;

GET_PHONE :表示是MainActivity切换到ContactActivity的请求码;

(3)添加”浏览选择联系人" ,跳转的界面ContactActivity,如下:

 1 package com.himi.Smshelper;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6 import java.util.Map;
 7 
 8 import android.app.Activity;
 9 import android.content.Intent;
10 import android.os.Bundle;
11 import android.view.View;
12 import android.widget.AdapterView;
13 import android.widget.AdapterView.OnItemClickListener;
14 import android.widget.ListView;
15 import android.widget.SimpleAdapter;
16 
17 public class ContactActivity extends Activity {
18     private ListView lv;
19 
20     @Override
21     protected void onCreate(Bundle savedInstanceState) {
22         // TODO 自动生成的方法存根
23         super.onCreate(savedInstanceState);
24         setContentView(R.layout.activity_contacts);
25         lv = (ListView) findViewById(R.id.lv);
26         List<Map<String, String>> data = new ArrayList<Map<String, String>>();
27         for (int i = 0; i < 10; i++) {
28             Map<String, String> map = new HashMap<String, String>();
29             map.put("name", "刘德华"+i);
30             map.put("phone", "1000" + i);
31             data.add(map);
32         }
33         lv.setAdapter(new SimpleAdapter(ContactActivity.this, data, R.layout.item_contacts,
34                 new String[] {"name", "phone"}, new int[] {R.id.tv_name,R.id.tv_phone}));
35         
36         lv.setOnItemClickListener(new OnItemClickListener() {
37 
38             public void onItemClick(AdapterView<?> parent, View view,
39                     int position, long id) {
40                 String phone = "1000"+position;
41                 Intent data = new Intent();
42                 data.putExtra("phone", phone);
43                 setResult(0, data);
44                 System.out.println("你点击了第"+position+"选项");
45                 finish();
46             }
47             
48         });
49     }
50 
51 }

添加的”选择联系人"的布局文件,activity_contacts.xml如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <ListView
 8         android:id="@+id/lv"
 9         android:layout_width="match_parent"
10         android:layout_height="wrap_content" >
11     </ListView>
12 
13 </LinearLayout>

当然上面布局文件中定义了Listview,Listview设置适配器的时候也必然需要设置Listview各个子项item的样式,item_contacts.xml如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <ListView
 8         android:id="@+id/lv"
 9         android:layout_width="match_parent"
10         android:layout_height="wrap_content" >
11     </ListView>
12 
13 </LinearLayout>

 

相应的SmsActivity如下:

 1 package com.himi.Smshelper;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.widget.AdapterView;
 8 import android.widget.AdapterView.OnItemClickListener;
 9 import android.widget.ArrayAdapter;
10 import android.widget.ListView;
11 
12 public class SmsActivity extends Activity {
13     private ListView lv;
14     private String[] sms  = {
15             "七夕节到了,送你一碗长寿面,祝你们的爱情像长寿面一样长长久久,永远不分离。送你一份酸辣汤,让你们生活像酸辣汤一样有滋有味。真诚的祝福你七夕快乐。",
16             "雪花的美丽,飘舞着心情的惦记,圣诞节最思念是你,给你我祝福的深意,把幸福累积,祈祷着祝愿的真挚,圣诞节祝你万事如意!",
17             "三年光阴,匆匆而过,如梦的年纪,弥漫着串串欢声笑语,不要挥手叹息,觉得繁花尽去,鼓足勇气,不要忘了互递惊喜的消息。",
18             "亲爱的织女:七夕情人节将至,愿我们高举中国特色痴情主义伟大旗帜,发扬鹊桥相会优良传统,保持二人世界爱情在线,携手开创爱情新局面。牛郎敬上。"
19             
20     };
21     @Override
22     protected void onCreate(Bundle savedInstanceState) {
23         // TODO 自动生成的方法存根
24         super.onCreate(savedInstanceState);
25         setContentView(R.layout.activity_sms);
26         lv = (ListView) findViewById(R.id.iv);
27         lv.setAdapter(new ArrayAdapter<String>(this, R.layout.item, sms));
28         
29         
30         //给listview的条目设置点击事件
31         lv.setOnItemClickListener(new OnItemClickListener() {
32 
33             public void onItemClick(AdapterView<?> parent, View view,
34                     int position, long id) {
35                 
36                 String context = sms[position];
37                 Intent intent = new Intent();
38                 intent.putExtra("context", context);
39                 setResult(0, intent);
40                 finish();
41             }
42             
43         });
44         
45     }
46 
47 }

 public final void setResult(int resultCode, Intent data):

第一个参数是:结果码,这里我们是使用了请求码,所以SmsActivity和ContactsAcitivity的反馈到MainActicity的结果码,我们这里就不用设置,这里设为0

第二个参数是:SmsActivity和ContactsAcitivity 反馈给MainActivity的intent数据

 

其余部分代码不用修改

 

3.当然代码也可以使用结果码优化,这里就不演示了。

posted on 2015-09-10 12:56  鸿钧老祖  阅读(225)  评论(0编辑  收藏  举报

导航