在一個主界面(主Activity)上能連接往許多不同子功能模塊(子Activity上去),當子模塊的事情做完之后就回到主界面,或許還同時返回一些子模塊完成的數據交給主Activity處理。這樣的數據交流就要用到回調函數onActivityResult()。
public class MainActivity extends Activity { public final int REQUESTCODE_FROM_MAIN_TO_OTHER = 1; public final int REQUESTCODE_FROM_MAIN_TO_PEPELU = 2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn_start_other = (Button) findViewById(R.id.btn_start_other); btn_start_other.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(MainActivity.this, OtherActivity.class); // 如果REQUESTCODE_MAIN> =0,當Activity結束時requestCode將歸還在onActivityResult()中。
//以便確定返回的數據是從哪個Activity中返回 startActivityForResult(intent, REQUESTCODE_FROM_MAIN_TO_OTHER); } }); Button btn_start_pepelu = (Button) findViewById(R.id.btn_start_pepelu); btn_start_pepelu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(MainActivity.this, PepeluActivity.class); startActivityForResult(intent, REQUESTCODE_FROM_MAIN_TO_PEPELU); } }); } /** * requestCode和startActivityForResult中的requestCode相對應 * resultCode和Intent是由子Activity通過其setResult()方法返回 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQUESTCODE_FROM_MAIN_TO_OTHER: if (resultCode == Activity.RESULT_OK) { Toast.makeText(this, data.getStringExtra("name"), Toast.LENGTH_LONG).show(); Log.i("onactivityresultdemo", data.getStringExtra("name")); } else { Log.i("onactivityresultdemo", "i blabalabal"); } break; case REQUESTCODE_FROM_MAIN_TO_PEPELU: if (resultCode == Activity.RESULT_CANCELED) { Toast.makeText(this, data.getStringExtra("name"), Toast.LENGTH_LONG).show(); Log.i("onactivityresultdemo", data.getStringExtra("name")); } else { Log.i("onactivityresultdemo", "i blabalabal"); } break; default: break; } } }
在OtherActivity中設置返回碼和返回數據:
public class OtherActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_other); Button btn = (Button) findViewById(R.id.btn_other); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.putExtra("name", "cc"); // 設置返回碼和返回攜帶的數據 setResult(Activity.RESULT_OK, intent); } }); } }
在PepeluActivity中設置返回碼和返回數據:
public class PepeluActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pepelu); Button btn_pepelu=(Button) findViewById(R.id.btn_pepelu); btn_pepelu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(); intent.putExtra("name", "pepelu"); setResult(Activity.RESULT_CANCELED,intent); } }); } }