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,如下:
17 8 13 14 20 21 26 27 33 34
布局效果如下:
(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 @Override16 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 view26 */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 view37 */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 @Override49 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 @Override21 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
添加的”选择联系人"的布局文件,activity_contacts.xml如下:
1 26 7 11 12 13
当然上面布局文件中定义了Listview,Listview设置适配器的时候也必然需要设置Listview各个子项item的样式,item_contacts.xml如下:
1 26 7 11 12 13
相应的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 @Override22 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(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.当然代码也可以使用结果码优化,这里就不演示了。