intent傳值是如何傳的?


    intent翻譯為中文的意思是意圖,目的。它的作用就是調用某個組件去做某一個事情。比如從當前運行的activity跳轉到另一個activity,當前activity要啟動一個service或啟動一個broadcastreceive(廣播接收器),此時就需要用intent來完成。簡單的說intent是各個組件的一個橋梁。既然充當了橋梁的角色,那么intent就該可以傳遞數據,把當前的組件的數據傳遞到另一個組件去使用,那么intent是如何來傳遞值的呢?通過Intent類提供的setData()和putExtra()方法傳遞。前一個參數是uri,是個標識比如一個文件的路徑等。后一個參數可以是值也可以是對象,以鍵值對的形式傳遞。

 ActivityA:

    Intent intent=new Intent();
    intent.setClass(ActivityA.this,ActivityB.class);
    intent.putExtra("extra", "Welcome to ...");
    startActivity(intent);

ActivityB:

  Intent intent=getIntent();
  String stringValue
=intent.getStringExtra("extra");

 如果把stringValue的值改變,ActivityA中extra所對應的值不會變。
以上的列子是通過putExtra()方法傳值的,現在看看對象的傳遞,是怎么傳遞的?

 ActivityA:

    Intent intent=new Intent();    

    intent.setClass(ActivityA.this,ActivityB.class);   

    Student s=new Student("shao",20);

    intent.putSerializable("STUDENT", s);    

    startActivity(intent);

 ActivityB:

  Intent intent=getIntent();  

  Student s=intent.getSerializable("STUDENT");

 現在如果把ActivityB中得到的Student對象s ,改變一個值,如s.setName("yang");那么ActivityA里的s會變嗎?不會變,因為intent傳遞對象時,傳遞的是一個副本(深拷貝)。

所以在android中,intent進行數據傳遞時,基本數據類型和對象傳遞的都是副本,改變傳遞過來的值,不會改變原來的值。注意的是在進行對象傳遞的時候,該對象所對應的類要實現Serializable接口或Parcelable接口。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM