標籤:android 資料 android studio 布局 textview
傳遞資料
在項目中右鍵,選擇 New,繼續選擇中下方的 Activity,最後是 Blank Activity。
此時 Android Studio 會為我們自動添加一個對應的布局檔案,為布局檔案中的 TextView 添加 ID,以便後續使用。
在主布局檔案中建立一個 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); } }); }
接下來再之前建立的 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 包來進行資料的傳遞,相比上一種方式,這一種可以包含更多的資料,你可以將其認為是一個集合,這也正符合“包”的概念。
@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); } });}
@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之間傳遞資料的四種方式