Android中實現activity的頁面跳轉並傳值

來源:互聯網
上載者:User

標籤:

一個Android應用程式很少會只有一個Activity對象,如何在多個Activity之間進行跳轉,而且能夠互相傳值是一個很基本的要求。

本次我們就講一下,Android中頁面跳轉以及傳值的幾種方式!

Activity跳轉與傳值,主要是通過Intent類來串連多個Activity.

 

1. Intent顯式意圖

 

(1) 最常見最一般的頁面跳轉代碼,很簡單,如下:

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

也可以這樣寫:

Intent intent = new Intent(); intent.setClass(A.this, SecondActivity.class);startActivity(intent);

(2) 當然,你需要建立一個SecondActivity的介面,並繼承activity,重寫onCreate方法:

1 public class SecondActivity extends Activity {2 3     @Override4     protected void onCreate(Bundle savedInstanceState) {5         super.onCreate(savedInstanceState);6         setContentView(R.layout.activity_second);7     }8     9 }

(3) 當然建立了一個activity後記得在資訊清單檔中進行註冊.

(4) 在onCreate方法裡設定布局檔案: R.layout.activity_second,所以需要在res目錄下建立

這樣就可以使用顯實現頁面跳轉了.

 

2.隱式意圖

 

隱式意圖與顯式意圖在寫法上有以下幾點不一樣:

(1) 在資訊清單檔中註冊需要加意圖過濾器

 

 1 <activity android:name="com.example.intent.SecondActivity"> 2             <intent-filter > 3                  4                 <action android:name="com.itheima.open02"/> 5                  6                 <!-- 一般配置 隱式意圖 的時候就需要寫 category 7                     表示用在 預設的裝置中 (預設的運行在 手機中 的)  --> 8                      9                 <category android:name="android.intent.category.DEFAULT"></category>10                 11                 <data android:scheme="haha" />12                 <data android:mimeType="image/jpeg"/>13                 <data android:host="www.google.com"/>14             </intent-filter>15         </activity>

 

(2) 在建立Intent對象時:

1 Intent intent = new Intent();2         3 intent.setAction("com.itheima.open02");4 5 intent.addCategory("android.intent.category.DEFAULT");6         7 intent.setDataAndType(Uri.parse("haha://www.google.com"), "image/jpeg");8         9 startActivity(intent);

這裡需要注意一點:

data和type可以單獨使用,但是他倆是互斥的

也就是說,使用了data就不能使用type,這個看API可以知道

如果想同時使用他倆的話,就需要用setDataAndType方法

注意: 隱式意圖必須包含動作(action),以及資料(data)

 

3. 顯式意圖和隱式意圖的區別

 

  • 顯式意圖: 一般用於啟用應用程式內部的
  • 隱式意圖: 一般用於啟用其他應用程式的組件
4. 資料傳遞

(1) 要想實現在頁面跳轉的同時傳遞資料,只需要用一個方法即可:putExtra()

1 Intent intent = new Intent(this, SecondActivity.class);2 intent.putExtra("name", et_name.getText()+"");3 startActivity(intent);

(2) 如果要傳遞複雜一點的資料,片:

putExtra可以傳遞一個Parcelable對象,而圖片的bitmap是Parcelable的子類

所以可以這樣操作:

1 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.logo);2 intent.putExtra("pic", bitmap);
5. 資料接收
1 // 首先擷取到意圖對象2 Intent intent = getIntent();3 4 // 擷取到傳遞過來的姓名5 String name = intent.getStringExtra("name");6 7 // 擷取到傳遞過來的圖片8 Bitmap bitmap = intent.getParcelableExtra("pic");
6. startActivityForResult

如果用正向傳遞的方式是可以實現資料的迴歸的,但是這樣做的壞處是開啟了很多個Activity累積到棧中,當點擊返回的時候就會逐一開啟之前的Activity,這樣的使用者
體驗是非常不好的,所以通過資料的反向傳遞的方式保證Activity只有當前的一個,當使用者點擊返回時可以直接退出。

 

下面以一種需求為例,講解startActivityForResult,傳送簡訊小助手:

使用者點擊"選擇模板"跳到簡訊模板的介面,然後點擊某一條簡訊,直接將選擇的簡訊返回到頁面中

 

主介面:

選擇模板簡訊的介面:

選擇連絡人介面:

這裡的列表是用listview來做的,點擊對應的listview可以將結果返回到主介面中.

 

以下是兩個按鈕點擊事件的代碼:

 


 1 /** 2      * 選擇簡訊模板 3      * @param view 4      */ 5     public void selectSms(View view){ 6         //點擊後跳轉到簡訊模板介面 7         Intent intent = new Intent(this, SmsActivity.class); 8          9         //兩個參數:Intent intent 意圖對象10         //int requestCode 請求碼11         startActivityForResult(intent, 2);12     }13     /**14      * 選擇收信人15      */16     public void addContacts(View view) {17         // 點擊後跳到連絡人清單介面18         Intent intent = new Intent(this, ContactsActivity.class);19         20         //為了一個結果 去啟動另外的一個 activity 介面 21         startActivityForResult(intent, 1);22     }

注意: 還需要重寫onActivityResult()方法,來接收返回的資料

範例程式碼如下:

 1 @Override 2     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 3         super.onActivityResult(requestCode, resultCode, data); 4  5         // resultCode : 結果碼, 用來鑒別 到底是  哪個 結果 ... 6         if (data != null) { 7             if (resultCode == 1) {// 說明是連絡人的返回結果 8                 contact = data.getStringExtra("contact"); 9                 et_contact.setText(contact);10             }else if(resultCode == 2){//說明是簡訊模板的返回結果11                 sms = data.getStringExtra("sms");12                 et_content.setText(sms);13             }14         }15     }

 

以下是簡訊模板的範例程式碼:

 1 public class SmsActivity extends Activity { 2  3     String [] sms = {"簡訊1","簡訊2","簡訊3","簡訊4"}; 4     @Override 5     protected void onCreate(Bundle savedInstanceState) { 6         super.onCreate(savedInstanceState); 7         setContentView(R.layout.activity_sms); 8          9         ListView lv_sms = (ListView) findViewById(R.id.lv_sms);10         11         lv_sms.setAdapter(new ArrayAdapter<String>(this, R.layout.item_sms, sms));12         13         lv_sms.setOnItemClickListener(new OnItemClickListener() {14 15             @Override16             public void onItemClick(AdapterView<?> parent, View view,17                     int position, long id) {18                 19                 String template = sms[position];20                 21                 Intent data = new Intent();22                 23                 data.putExtra("sms", template);24                 25                 //int resultCode, 結果碼,用於區分到底是哪個的返回資料26                 //Intent data 27                 setResult(2, data);28                 29                 finish();30             }31         });32     }33     34 }

 

好了,關於頁面跳轉就先介紹到這裡.

 

Android中實現activity的頁面跳轉並傳值

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.