Android Activity的跳转与传值
2010-05-31 17:24:00 来源:WEB开发网SendSMSActivity:
((Button) findViewById(R.id.send)).setOnClickListener( new Button.OnClickListener() { public void onClick(View v) { SendSMSActivity.this.setResult(RESULT_OK); SendSMSActivity.this.finish(); } }):
** 注意,在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数,看到当前的Activity没反应。
RESULT_OK和RESULT_CANCELED是系统空间里面的常量,不需要自定义,直接使用就行。
另外在运行过程中,发现按Back键后,是可以返回RESULT_CANCELED的,看了SDK doc后,原来真的是那样,而且不带有数据的。这意味着,如果你设想在返回RESULT_CANCELED时并返回数据,那么需要截获Back键的事件处理,把原来返回RESULT_CANCELED的核心逻辑copy到事件处理里面。这里给个例子:
((Button) findViewById(R.id.cancel)).setOnClickListener( new Button.OnClickListener() { public void onClick(View v) { // 实例化 Bundle,设置需要传递的参数 Bundle bundle = new Bundle(); bundle.putString("phoneNO", "020-123"); SendSMSActivity.this.setResult(RESULT_CANCELED, SendSMSActivity.this.getIntent().putExtras(bundle)); SendSMSActivity.this.finish(); } }); @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // 是否触发按键为back键 if (keyCode == KeyEvent.KEYCODE_BACK) { // 实例化 Bundle,设置需要传递的参数 Bundle bundle = new Bundle(); bundle.putString("phoneNO", "020-123"); setResult(RESULT_CANCELED, this.getIntent().putExtras(bundle)); this.finish(); return true; }else { return super.onKeyDown(keyCode, event); } }
这里要注意的是,在处理Back键事件后return true则表示本事件不再传递给其他函数处理,可理解为由当前函数全权负责处理,所以在return前finish当前Activity,保持原来的行为表现,当然我们可以设置为隐藏当前Activity等其他行为。
Activity传送数据
在上面的代码中,我们可以看到使用Bundle来存储数据,并将其putExtras到Intent里面。Bundle使用“名字-值”来存储数据。另外注意一下,setResult需要用到Intent参数时,如何获取原来的Intent的!
赞助商链接