2012-05-28 67 views
9

这是我从我所说的second Activityfirst activity代码:什么是意图从onActivityResult参数

@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如何获得第三个参数的值?它如何运作,任何人都可以告诉我?为什么不是这个错误?

+0

只要检查该ansswer http://stackoverflow.com/a/25196220/1587156 –

回答

13

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

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

考虑这个例子:

CALL第二个活动

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

ON第二个活动,SET INTENT RESULT

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

BACK TO第一活动,ONACTIVITYRESULT()

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

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

+0

,但我不能理解这一部分。如果我从我的主要活动发送REQUEST_CODE,并在我的mainc活动中的onActivityResult()中取回这个REQUEST_CODE。什么是比较的逻辑?(requestCode == REQUEST_CODE_CHEC) –

+0

的基本思想是,onActivityResult()将捕获它从返回意图中获得的每一个意图。现在,为了确定返回的意图,可以使用'requestCode'将它与您已有的REQUEST_CODE进行比较。有时候,一个活动期望一个意图回来,另外一个时间,超过3个。 – ariefbayu

1

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

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

之后,您将在Inactive参数的主活动中检查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(); 
} 
相关问题