Android開發學習筆記之四大組件---Activity的跳轉,資料傳遞(二)

來源:互聯網
上載者:User

標籤:android   style   blog   io   ar   color   使用   sp   for   

上一章我們溫習了Activity的建立,以及各生命週期,這一章我們主要學習Activity的跳轉,以及Activity之間的資料傳遞

一、Activity跳轉:

Activity之間的單純跳轉非常簡單,只需要建立兩個Activity,然後使用startActivity(intent)來進行跳轉,看下代碼:

Intent uio=new Intent(thisActivityclass,ActivityBclass);startActivity(uio);

Intent是什嗎?

Android中提供了Intent機制來協助應用間的互動與通訊,Intent負責對應用中一次操作的動作、動作涉及資料、附加資料進行描 述,Android則根據此Intent的描述,負責找到對應的組件,將 Intent傳遞給調用的組件,並完成組件的調用。Intent不僅可用於應用程式之間,也可用於應用程式內部的Activity/Service之間的 互動。因此,Intent在這裡起著一個媒體中介的作用,專門提供組件互相調用的相關資訊,實現調用者與被調用者之間的解耦。

 

二、Activity間資料傳遞:

以下我們完整編寫一個Activity跳轉傳遞資料及返回參數的例子,從Activity A中點擊一個按鈕,跳轉至Activity B,Activity B中有兩個按鈕,分別點擊兩個按鈕,介面返回到Activity A中並使用toast展示不同的返回參數

1.在Activity A中,大量新增資料至Bundle,並將Bundle添加進intent

        Intent in1=new Intent(this,ActivityB.class);        Bundle bun1=new Bundle();        bun1.putString("姓名", "baihua");        bun1.putString("年齡", "24");        in1.putExtras(bun1);

2.Activity A的按鈕點擊事件中進行Activity跳轉,並使用startActivityForResult(Intent intent, int requestCode)方法開啟新的Activity,新的Activity關閉後會向前面的Activity傳回資料

startActivityForResult(in1,30)

3.Acitivity B傳回值後,我們需要得到新Activity的回傳資料進行邏輯處理,需要重寫onActivityResult(int requestCode,int resultCode,Intent data),這裡我們定義一下功能需求,如果請求碼是30,我們點擊Activity B中的按鈕,返回學號30的學生的資訊,如果請求碼是31,我們點擊Activity B中的按鈕,返回學號31的學生的資訊;Activity B中,點擊按鈕1,返回該學號對應學生的姓名,點擊按鈕2,返回該學號對應學生的年齡

首先我們處理Activity B中的資料返回

      public void baihinfo(View v)     //對應學號學生的姓名      {            Intent in1=new Intent();            in1.putExtra("姓名", "baih");            //in1.putExtra("年齡", "24");            setResult(2, in1);    //使用setResult返回資料到Activity A中,前一個參數為返回結果碼            finish();      //函數處理完後關閉該Activity      }            public void zzzinfo(View v)      //對應學號學生的年齡      {            Intent in2=new Intent();            //in2.putExtra("姓名", "zzz");            in2.putExtra("年齡", "28");            setResult(1, in2);            finish();      //函數處理完後關閉該Activity      }

4.處理Activity A中得到Activity B的返回結果碼的邏輯,重寫onActivityResult

    public void onActivityResult(int requestCode,int resultCode,Intent data)    {                if(requestCode==30)      //判斷如果Activity A點擊事件中的請求碼是30,則返回學號30的學生         {            if(resultCode==1)    //判斷如果返回結果碼為1,就使用.getExtras().getString()擷取30學生的姓名,為其他就擷取年齡,這裡邏輯可以更細,不多寫了            {                Bundle er=data.getExtras();                String t=er.getString("姓名");                Log.e("baih",t);                Toast.makeText(MainActivity.this, t, 2000).show();            }            else{                Bundle san=data.getExtras();                String y=san.getString("年齡");                Log.e("baih", y);                Toast.makeText(MainActivity.this,y, 2000).show();;            }        }        else{            if(requestCode==31)      //判斷如果Activity A點擊事件中的請求碼是31,則返回學號31的學生             {                if(resultCode==1)                {                    Bundle er1=data.getExtras();                    String x=er1.getString("姓名");                    Log.e("baih",x);                    Toast.makeText(MainActivity.this, x, 2000).show();                }                else{                    Bundle san1=data.getExtras();                    String z=san1.getString("年齡");                    Log.e("baih", z);                    Toast.makeText(MainActivity.this,z, 2000).show();;                }            }                    }

變數沒有走規則,其實這個位置,主要是想介紹兩個參數,requestCode和resultCode

requestCode是請求碼,使用startActivityForResult(Intent intent, int requestCode)方法開啟新的Activity,我們需要為startActivityForResult()方法傳入一個請求碼(第二個參 數)。請求碼的值是根據業務需要由自已設定,用於標識請求來源。例如:一個Activity有兩個按鈕,點擊這兩個按鈕都會開啟同一個Activity, 不管是那個按鈕開啟新Activity,當這個新Activity關閉後,系統都會調用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那個按鈕開啟的,並且要做出相應的業務處理

 

resultCode是結果碼,在一個Activity中,可能會使用startActivityForResult()方法開啟多個不同的Activity處理不同的業務,當這些新 Activity關閉後,系統都會調用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。為了知道返回的資料來自於哪個新Activity

兩個很重要的參數,負責控制Activity資料轉送之間的邏輯控制及判斷

Activity傳輸資料主要使用intent.putExtra(String key,value)進行單個參數傳遞,或者將資料參數集中寫入bundle中,使用intent.putExtra(Bundle extras)進行集中傳輸

 

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.