什么是onActivityResult参数的意图

时间:2012-05-28 20:30:16

标签: android android-intent android-activity

以下是我调用first activity的<{1}}代码:

second Activity

以下是@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT){ startActivityForResult(new Intent("chap.two.Chapter2Activity2"),request_Code); } return false; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == request_Code) { if (resultCode == RESULT_OK) Toast.makeText(this,data.getData().toString(),Toast.LENGTH_SHORT).show(); } } 的代码:

chap.two.Chapter2Activity2

在这里,我看到Button n = (Button) findViewById(R.id.btn_OK); n.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent data = new Intent(); //---get the EditText view--- EditText txt_username =(EditText) findViewById(R.id.txt_username); //---set the data to pass back--- data.setData(Uri.parse(txt_username.getText().toString())); setResult(RESULT_OK, data); //---closes the activity--- finish(); } }); 有两个参数,但是 setResult(RESULT_OK, data)有三个,我想知道onActivityResult(int requestCode, int resultCode, Intent data)如何获得第三个参数的值?怎么工作有人能告诉我吗?为什么不是这个错误?

2 个答案:

答案 0 :(得分:17)

当您调用Activity.startActivityForResult()时,设置requestCode。稍后,onActivityResult()需要此请求代码,以确定哪些活动正在向其发送数据。我们不需要在requestCode上再次提供setResult(),因为requestCode是随身携带的。

data从已启动的意图返回intent data。当我们在被调用的意图上设置extras时,我们通常会使用这些数据。

考虑这个例子:

致电第二项活动

Intent i = new Intent(MainActivity.this, CheckActivity.class);
startActivityForResult(i, REQUEST_CODE_CHECK);

关于第二项活动,设定意外结果

getIntent().putExtra("TADA", "bla bla bla");
setResult(RESULT_OK, getIntent());
finish();

回到第一个活动,ONACTIVITYRESULT()

if(requestCode == REQUEST_CODE_CHECK && resultCode == RESULT_OK){
    text1.setText(data.getExtras().getString("TADA") );
}

你去吧。您现在应该了解Intent data是什么以及如何设置和获取值。

答案 1 :(得分:2)

第三个参数是Intent,它是从子活动(第二个活动,即将完成)发送的。

如果您想在子活动中执行某些计算或获取一些用户名/密码,并且您想将结果发送到主活动,那么您将数据放入意图中并在完成之前返回主活动( )。

之后,您将使用Intent参数检查主活动中的onActivityResult(int,int,Intent)。

实施例:: MainActivity:

public void onClick(View view) {
  Intent i = new Intent(this, subActivity.class);
  startActivityForResult(i, REQUEST_CODE);
} 

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
    if (data.hasExtra("username") && data.hasExtra("password")) {
      String username =  data.getExtras().getString("username");
      String password =  data.getExtras().getString("password");

    }
  }

子活动::

@Override
public void finish() {
  // Create one data intent 
  Intent data = new Intent();
  data.putExtra("username", "Bla bla bla..");
  data.putExtra("password", "*****");
  setResult(RESULT_OK, data);
  super.finish();
}