傳遞簡單數據 創建兩個activity,FirstActivity和TwoActivity,這裡將會將數據從FisrtActivity傳給TwoActivity。 創建完activity的目錄界面如下。 現在我們先對它們的layout佈局做一些調整。 1. 在activity_first.xml中添 ...
傳遞簡單數據
創建兩個activity,FirstActivity和TwoActivity,這裡將會將數據從FisrtActivity傳給TwoActivity。
創建完activity的目錄界面如下。
現在我們先對它們的layout佈局做一些調整。
1. 在activity_first.xml中添加一個按鈕,這是用來作為頁面跳轉的觸發按鈕。並將原先多餘的其它組件刪去。添加的代碼如下。
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnStart"
android:text="啟動另一個activity"/>
界面顯示如下
2. 在activity_two.xml中添加TextView組件,其餘組件可刪去,保持簡潔。其代碼如下。
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv"
android:text="這是第二個activity"/>
界面顯示如下
好了準備工作已經完成了,現在正式開始講解啦。
首先我們的思路是在FirstActivity中先通過按鈕的ID來獲取Button對象,併為其添加監聽事件,我們將會在這裡進行activity的跳轉,同時將數據添加給Intent對象,通過Intent對象來將數據傳給TwoActivity。
1. FirstActivity代碼如下
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class FirstActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
findViewById(R.id.btnStart).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i=new Intent(FirstActivity.this,TwoActivity.class);
i.putExtra("data","hello");
startActivity(i);
}
});
}
}
這裡最關鍵的代碼是Intent.putExtra(String name,String value),這是將數據綁定到Intent對象上,當然,這個方法有許多重載,也可綁定不是String類型的數據。比如
大家可根據情況做選擇。
2. TwoActivity接收數據,代碼如下
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import org.w3c.dom.Text;
public class TwoActivity extends AppCompatActivity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
//獲取傳入的Intent
Intent i=getIntent();
//利用我們在XML文件中定義的View的id屬性來獲取相應的View對象
tv=(TextView) findViewById(R.id.tv);
//設置文本內容
tv.setText(i.getStringExtra("data"));
}
}
這裡最關鍵的代碼就是Intent.getStringExtra(String name),name是在FirstActivity中設置的綁定的數據的名字data,返回的就是需要傳遞的數據。好了,現在運行應用,可以跳轉activity的同時也可傳遞數據了,來運行一下吧!
傳遞數據包Bundle
上面的是將數據一個個附加到Intent對象進行傳遞的,現在換種方式,將需要的數據進行打包,然後一起傳送出去。
1. FirstActivity
......
findViewById(R.id.btnStart).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i=new Intent(FirstActivity.this,TwoActivity.class);
//i.putExtra("data","hello");
Bundle b=new Bundle();
b.putString("name","MrY");
b.putInt("age",20);
i.putExtras(b);
startActivity(i);
}
});
這裡創建了Bundle對象,然後調用相關的put方法將數據打包到Bundle對象上,最後只要將Bundle對象附加到Intent對象上。
2. 改變TwoActivity中代碼來接收數據
//獲取傳入的Intent
Intent i=getIntent();
Bundle data=i.getExtras();//獲取Bundle對象
//利用我們在XML文件中定義的View的id屬性來獲取相應的View對象
tv=(TextView) findViewById(R.id.tv);
//設置文本內容
// tv.setText(i.getStringExtra("data"));
tv.setText(String.format("name=%s,age=%d",data.getString("name"),data.getInt("age")));
關鍵方法是Intent.getExtras(Bundle b)返回傳遞過來的Bundle數據包。
來運行應用吧,看一下第二種方式是否能達到預期效果呢,答案肯定是的啦。
當然還有一種Bundle傳遞方法
FirstActivity中用如下方式傳遞
i.putExtra("data",b);
TwoActivity中相應的改變獲取Bundle的方法
Bundle data=i.getBundleExtra("data");
到這裡要講解的內容已經全部完成了!