1.開啓界面獲取返回值java
(1)採用一種特殊的方式開啓Activity:android
startActivityForResult(intent , 0);app
(2)在被開啓的Activity裏面設置數據:ide
Intent data = new Intent();佈局
data.putExtra("content", content);優化
setResult(0, data);this
備註:spa
public final void setResult(int resultCode,Intent data):它是Activity的方法,用於返回數據給上一個Activity的(跳轉以前的Activity)code
(3)記得關閉新開啓的界面:xml
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.固然代碼也能夠使用結果碼優化,這裏就不演示了。