從昨晚到現在終於調試通了一個startActivityForResult的例子,網上要麼有些說的太複雜了,要麼說的含糊,搞的我走了很多彎路,所以寫篇心得。
在一個主介面(主Activity)上能串連往許多不同子功能模組(子Activity上去),當子模組的事情做完之後就回到主介面,還同時返回一些子模組完成的資料交給主Activity處理。 用startActivity啟動主介面是一個新的Intent執行個體,而訪問的主介面還在activity棧的下面沒有調出來,這樣做的一個最大的問題是,回不到原介面就不能多個子功能模組共同來給主介面提供資料或服務了。這個時候就要用startActivityForResult了!
目的: MainActivity.java 是主介面,SecondActivity.java 是子功能模組,要從main啟動second,second收到main發來的資料幹完活之後,按按鍵OK會把結果彙報給main,同時自己關閉返回到main。
具體實現:
分四部分:
1,在MainActivity裡面設定一個按鈕sendBuddle,發送資料到SecondActivity,同時跳轉到second介面。按鍵監聽代碼:
複製代碼 代碼如下:class sendButtonListen implements OnClickListener{
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
String str = "dajia hao ";
intent.putExtra("send", str);
intent.setClass(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, 0);
}
}
2,在SecondActivity裡面的OnCreate函數裡,接收來自main裡的intent發來的資料。
複製代碼 代碼如下:@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
okButton = (Button)findViewById(R.id.ok); //按這個ok按鍵,會返回到main。
Intent intent = getIntent();
String getStr = intent.getStringExtra("send");
TextView tv = (TextView)findViewById(R.id.sendText);
tv.setText(getStr);
Toast.makeText(SecondActivity.this,
"從MainActivity傳回來的資料是:"+getStr,
Toast.LENGTH_SHORT).show();
okButton.setOnClickListener(new okButtonListen());
}
3,在SecondActivity裡實現監聽Ok按鍵,按下後返回到MainActivity,同時自己關閉,並給MainActivity發送資料。ok按鍵的監聽代碼如下:
複製代碼 代碼如下: class okButtonListen implements OnClickListener{
public void onClick(View v) {
// TODO Auto-generated method stub
Intent sendIntent = new Intent(SecondActivity.this, MainActivity.class);//這種方法今天才學的,記下!方便這樣寫,坑爹的有些教程,這塊沒有給Inent綁定
Bundle bundle = new Bundle();
bundle.putString("send", "大家好");
sendIntent.putExtras(bundle);
SecondActivity.this.setResult(RESULT_OK, sendIntent);
SecondActivity.this.finish();
}
4,返回到main後,main要接收second發來的資料。在MainActivity裡複寫它的OnActivityResult方法。
複製代碼 代碼如下: @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK){
Bundle bundle = data.getExtras();
String str = bundle.getString("send");
Toast.makeText(MainActivity.this,
"我回來的,第二個activity傳回的資料是:"+str,
Toast.LENGTH_SHORT).show();
}
}
注意:這裡面不要再建立Intent,onActivityResult有三個參數,第三個參數就是Intent,只需要用他做參數就行了。