Android(java)學習筆記165:開發一個多界面的應用程序之不一樣界面間互相傳遞數據(短信助手案例的優化:請求碼和結果碼)

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的(跳轉以前的Activitycode

(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.固然代碼也能夠使用結果碼優化,這裏就不演示了。

相關文章
相關標籤/搜索