Android 學習之路 1:Activity之間傳遞資料的四種方式

來源:互聯網
上載者:User

標籤:android   資料   android studio   布局   textview   

傳遞資料
  • 建立 Activity

在項目中右鍵,選擇 New,繼續選擇中下方的 Activity,最後是 Blank Activity。

此時 Android Studio 會為我們自動添加一個對應的布局檔案,為布局檔案中的 TextView 添加 ID,以便後續使用。

  • 用Intent 發送資料

在主布局檔案中建立一個 Button 控制項,並在主類中定義它,然後為它設定 Click 的監聽事件。

    Button button;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent i = new Intent(MainActivity.this,Main2Activity.class);                i.putExtra("Thanks","Thank you for reading my blog.");                startActivity(i);            }        });    }
  • 用 Intent 接收資料

接下來再之前建立的 Activity 中同樣建立一個 Intent 進行接受即可。和發送試用的 putExtra 類似,接受也可以用 getStringExtra 。當然了,正對不同的資料類型可以用不同的方法。

private TextView tv;                                 @Override                                            protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);                  setContentView(R.layout.activity_main2);             Intent i = getIntent();                              tv = (TextView)findViewById(R.id.tv);                tv.setText(i.getStringExtra("Thanks"));          }                                                                                            
傳遞 Bundle 包

在兩個 Activity 之間也可以用 Bundle 包來進行資料的傳遞,相比上一種方式,這一種可以包含更多的資料,你可以將其認為是一個集合,這也正符合“包”的概念。

  • 建立 Bundle

  • Bundle 可以嵌套 Bundle

  • 對 Intent 對象使用 putExtras 方法

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            Intent i = new Intent(MainActivity.this,Main2Activity.class);            Bundle a = new Bundle();            a.putString("Thanks", "Thank you for reading my blog.");            Bundle b = new Bundle();            b.putString("Android","Google");            b.putString("Windows","Microsoft");            a.putBundle("bundle",b);            i.putExtras(a);            startActivity(i);        }    });}
  • 根據相應的 Key 值擷取相應的Bundle資料
@Override                                                                       protected void onCreate(Bundle savedInstanceState) {                                super.onCreate(savedInstanceState);                                             setContentView(R.layout.activity_main2);                                        Intent i = getIntent();                                                         Bundle a2 = i.getExtras();                                                      tv = (TextView)findViewById(R.id.tv);                                           tv.setText(String.format("%s Android屬於%s,Windows屬於%s",                                  a2.getString("Thanks"),                                                         a2.getBundle("bundle").getString("Android"),                                    a2.getBundle("bundle").getString("Windows")));                      }                                                                               
傳遞自訂對象

Android 開發過程中自然少不了“類”了,那麼這種資料又如何傳輸呢。

  • 切記:一定要執行序列化,即加上“implements Serializable”
public class Source implements Serializable{    private int source;    private String ID;    public int getSource() {        return source;    }    public void setSource(int source) {        this.source = source;    }    public String getID() {        return ID;    }    public void setID(String ID) {        this.ID = ID;    }    public Source(String ID, int source) {        this.source = source;        this.ID = ID;    }}

相應有了前面的瞭解,大家都可以直接猜到如何使用了,那我就不再囉嗦了。

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            Intent i = new Intent(MainActivity.this,Main2Activity.class);            i.putExtra("source",new Source("Player",1000));            startActivity(i);        }    });}
@Override                                                     protected void onCreate(Bundle savedInstanceState) {              super.onCreate(savedInstanceState);                           setContentView(R.layout.activity_main2);                      Intent i = getIntent();                                       Source s = (Source) i.getSerializableExtra("source");         tv = (TextView) findViewById(R.id.tv);                        tv.setText(String.format("ID是%s,得分是%d",                               s.getID(), s.getSource()));                       }                                                             
從Activity返回資料

使用者需要與應用進行互動,應用需要將使用者輸入的資料進行返回,所以……

在主 Activity 中定義 Button 和 TextView,前者用於導航至次 Activity , 後者用於顯示返回的資料。

在次 Activity 中定義 Button 和 EditText,前者用於確認並返回至主 Activity,後者用於使用者輸入。

在次 Activity 中:

  • 同樣用 Intent 傳遞資料

  • 用 setResult 設定返回結果

  • 最後用 finish

private Button button ;                                         private EditText editText;                                      @Override                                                       protected void onCreate(Bundle savedInstanceState) {                super.onCreate(savedInstanceState);                             setContentView(R.layout.activity_main2);                        editText = (EditText)findViewById(R.id.editText);               button = (Button)findViewById(R.id.button2);                    button.setOnClickListener(new View.OnClickListener() {              @Override                                                       public void onClick(View v) {                                       Intent i = new Intent();                                        i.putExtra("info",editText.getText().toString());               setResult(0, i);  // 0表示成功                                      finish();                                                   }                                                           });                                                         }                                                               

在主 Activity 中:

  • 用 startActivityForResult 進行導航,並請求結果
    private Button button;    private TextView textView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        textView = (TextView)findViewById(R.id.textView);        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent i = new Intent(MainActivity.this,Main2Activity.class);                startActivityForResult(i,0);            }        });    }
  • 重載 onActivityResult 方法,並通過 data 參數擷取資料。
    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        textView.setText(data.getStringExtra("info"));    }

好了,Activity 之間就是這麼傳遞資料的……

零點半了……睡覺……

本文為重複文章,僅為測試。

著作權聲明:本文為 NoMasp柯於旺 原創文章,未經許可嚴禁轉載!歡迎訪問我的部落格:http://blog.csdn.net/nomasp

Android 學習之路 1: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.