14

这是我first activity调用的代码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)有三个,我想知道如何onActivityResult获取第三个参数的值?它是如何工作的,谁能告诉我?为什么不是这个错误?

4

2 回答 2

21

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

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以及如何设置和获取值。

于 2012-05-28T20:36:50.273 回答
4

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

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

之后,您将在主活动中检查 onActivityResult(int, int, Intent) 以获取带有 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();
} 
于 2014-04-10T13:39:31.107 回答