總網頁瀏覽量

2013年3月21日 星期四

android切換視窗,Activity之間傳遞接收資料

一、切換視窗
功能:
按下View或Button
跳到另外一頁(activity)


以Intent實作

button1.setOnClickListener(new OnClicklistener(){
public void onClick(View arg0) {
    Intent intent = new Intent();
//    intent.setClass(this, Page2.class);
intent.setClass(MainActivity.this,Page2.class);
//setClass:設定標的activity,將目前activity的context傳遞進去。
//因為這是寫在匿名內部類別所以要加上MainActivity
//否則this只代表OnClickListner物件
startActivity(intent);//class Activity的method
//啟動新的activity
 }});



在Page2.java裡面:
要與page2.xml連接
setContentView(R.layout.page2);

去Mainifest.xml
Application Node 新增Activity
Name部分按下browser會自動搜尋,之後與.java檔案關聯
或直接貼上<activity android:name="Page2"></activity>


二、Activity之間傳遞資料與接收資料
甲、傳遞過去(A→B):
上面步驟完成之後
在第一個Activity的Itent下面加上
intent.putExtra(String name,String Value);
intent.putExtra("HP", "18"); 回傳Intent
意思是新增一個叫做HP的data,HP的值是18

官網文件是
Add extended data to the intent. The name must include a package prefix, for example the app com.android.contacts would use names like "com.android.contacts.ShowAll".
name要加上套件名稱


在第二個Activity加上
Intent intent = getIntent();
//這裡getIntent()是Activity的method,接收第一頁傳來的Intent物件
  String name =intent.getStringExtra( "HP");
// 取出字串物件
  page2_msg.append(name);
//將字串顯示在TextView上面


Activity之間傳遞資料可以透過intent.putXXX(String name,XXX型別資料)傳遞。

下一個Activity則是呼叫Activity的method,getItent()接收上一個Activity傳過來的intent物件。接著呼叫Intent類別物件的getXXXExtra(String name);取得上一個Activity所傳遞的資料。

乙、傳回資料(B→A)
功能:從B頁面(Activity ),回到A頁面(Activity)。B頁面傳回資料給A。A可以利用這些資料做運算處理。

(1).單純的callback

要達到以上功能,我們切換頁面的method,要用startActivityForResult(Intent,int RequestCode)替代上面的startActivity(Intent),而且要在Activity A改寫(override) onActivityResult()方法。當頁面切換回來Activity A時,Activity A會自動呼叫onActivityResult()。回傳ResultCode、Intent以及RquestCode。
RequestCode的值用來作為Activity的標籤,如此一來Activity A才可以知道是哪個Activity回傳。使用者可以自己指派RequestCode的value。

如果Activity B 要傳遞資料回去給Activit A, 那麼Activity B要改寫finish(),並且在finish呼叫setResult(ResultCode,intent);傳回intent以及ResultCode給原本Activity(即Activity A)繼續處理。ResultCode也可自訂。

在Activity A , override onActivityResult

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//如果切換的Activity沒有setResult();那麼Intent data=null、resultCode=0
  super.onActivityResult(requestCode, resultCode, data);
  main_msg.append("RequestCode:" + requestCode+"ResultCode"+resultCode);
  main_msg.append("Data :"+data.getStringExtra("from"));


}


在Activit B 改寫finish():
public void finish() {
  Intent intent = new Intent();
  intent.putExtra("from", "PAGE2");//塞資料到intent,key為from,value為PAGE2的資料
  setResult(4,intent);//將intent以及ResultCode回傳
  super.finish();
 }




textView印字串可以用
textview1.append("字串"+變數);

沒有留言:

張貼留言