看排版更好的原文地址
intent實現普通跳轉
使用intent的setclass方法,示例(由此界面跳轉到NewActivity界面)
//使用setOnClickListener方法設置點擊事件
Button button=(Button)findViewById(R.id.mainButton);
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View p1)
{
Intent intent=new Intent();
intent.setClass(MainActivity.this,NewActivity.class);
//新建一個Intent,使用setClass方法設置跳轉的哪個界面
startActivity(intent);
}
});
使用Bundle傳遞數據的跳轉
Bundle類
Bundle類用來攜帶數據,類似於map。里面存放鍵值對。Bundle類有putXXX()/getXXX()方法,如putInt(),getInt(),putString(),getString().
putXXX()用來往Bundle對象存入數據。
getXXX()用來從Bundle對象取出數據。
其內部使用了HashMap<String,Object>類型的變量存儲數據。
示例
如下代碼實現將數據從當前Activity傳遞到另一個Activity:
(當前Activity)
Button button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle data=new Bundle();
//創建了一個Bundle對象用來存儲在兩個Activity之間傳遞的數據
data.putString("website","cnblogs.com/hjw1");
data.putString("name","環家偉");
data.putInt("age",20);
//添加進Bundle對象里面兩個String類型的數據和一個int類型的數據
Intent gotoAnother=new Intent(MainActivity.this,Main2Activity.class);
//創建了一個從MainActivity跳轉到Main2Activity的Intent
gotoAnother.putExtras(data);
//將存儲了數據的Bundle對象put進Intent里面
startActivity(gotoAnother);
//開始跳轉
}
});
(目標Activity)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Bundle receive=getIntent().getExtras();
//得到隨Intent傳遞過來的Bundle對象
String name=receive.getString("name");
String website=receive.getString("website");
int age=receive.getInt("age");
//根據設定的String關鍵詞得到對應的數據。
((TextView)findViewById(R.id.name)).setText("姓名:"+name);
((TextView)findViewById(R.id.age)).setText("年齡:"+age);
((TextView)findViewById(R.id.website)).setText("博客地址:"+website);
//將數據顯示到TextView上面
}
結果:
姓名:環家偉
年齡:20
博客地址:cnblogs.com/hjw1
直接使用Intent傳遞數據
Intent自身也有一系列的putExtra()函數。( 這里與上面的putExtras()函數區分開,這里沒有s )
這個函數有很多重載,如putExtra(String name,String value),putExtra(String name,int value)等。
與上面的Bundle類操作方法相似,都是String-value鍵值對。
接收時,Intent對象有getXXXExtra()一系列函數得到傳遞過來的數據,如getStringExtra()等。
示例:
(當前Activity)
Intent gotoAnother=new Intent(MainActivity.this,Main2Activity.class);
//創建了一個從MainActivity跳轉到Main2Activity的Intent
gotoAnother.putExtra("name","環家偉");
gotoAnother.putExtra("age",20);
gotoAnother.putExtra("website","cnblogs.com/hjw1");
//將數據put進Intent里面
startActivity(gotoAnother);
//開始跳轉
(目標Activity)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Intent receiveIntent=getIntent();
//得到Intent
String name=receiveIntent.getStringExtra("name");
int age=receiveIntent.getIntExtra("age",0);
String website=receiveIntent.getStringExtra("website");
((TextView)findViewById(R.id.name)).setText("姓名:"+name);
((TextView)findViewById(R.id.age)).setText("年齡:"+age);
((TextView)findViewById(R.id.website)).setText("博客地址:"+website);
//將數據顯示到TextView上面
}
結果:
姓名:環家偉
年齡:20
博客地址:cnblogs.com/hjw1
得到新Activity關閉后的數據
想象一下,你要做一個圖像處理的app。你在當前actuvity點擊了一個按鈕,然后出現圖片列表,選擇圖片后原activity要得到圖片。這種情況在Windows里面經常出現,點擊按鈕打開文件管理器選擇文件。
要想得到新Activity關閉后傳過來的數據,只要在打開新Activity的跳轉時使用startActivityForResult(Intent intent,int requestCode) 函數,而不是以前的startActivity()函數。
這樣打開的Activity在關閉后會傳回數據。
為了得到傳回的數據,需要在前面的Activity里面重寫onActivityResult(int requestCode,int resultCode,Intent data)函數。
示例
實現點擊按鈕得到字符串時,打開新界面,點擊按鈕關閉新界面后,Toast顯示環家偉。
而點擊按鈕得到整數時,Toast內容為20。
Button stringButton=(Button)findViewById(R.id.stringButton);
stringButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent gotoAnother=new Intent(MainActivity.this,Main2Activity.class);
startActivityForResult(gotoAnother,1);
//第二個參數是請求碼,比如此Activity有兩個按鈕都是啟動同一個新Activity
//請求碼就是用來區分到底是哪個按鈕請求的
}
});
Button intButton=(Button)findViewById(R.id.intButton);
intButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent gotoAnother=new Intent(MainActivity.this,Main2Activity.class);
startActivityForResult(gotoAnother,2);
//此處請求碼是2
}
});
重寫onActivityResult方法用來接收傳過來的信息
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1)
Toast.makeText(this,"按鈕1得到字符串:"+data.getStringExtra("name"),Toast.LENGTH_SHORT).show();
if(requestCode==2)
Toast.makeText(this,"按鈕2得到整數:"+data.getIntExtra("age",0),Toast.LENGTH_SHORT).show();
//此處的requestCode就是startActivityForResult里面傳遞的requestCode
// 可以用來區分是哪個按鈕請求的
/*
提示:Toast不要忘記show()
*/
}
新Activity中
Button closeButton=(Button)findViewById(R.id.close);
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();//數據通過Intent返回
intent.putExtra("name","環家偉");
intent.putExtra("age",20);
Main2Activity.this.setResult(RESULT_OK,intent);
//RESULT_OK是一個整數,此參數是結果碼,可以用來區分是哪個Activity返回的數據
//(如果原Activity可以打開多個新Activity)
finish();//關閉新Activity
}
});
