2012-05-28 48 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(); 
} 
相關問題