2012-05-28 10 views
9

यहाँ से आशय है, जहां मैं second Activity फोन से मेरी first activity कोड हैक्या onActivityResult पैरामीटर

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() द्वारा आवश्यक है। हमें requestCode को फिर से setResult() पर आपूर्ति करने की आवश्यकता नहीं है क्योंकि requestCode साथ साथ किया जाता है।

dataintent 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 क्या है और मूल्य को कैसे सेट और लाया जाए।

+0

लेकिन मैं नहीं कर सकता इस भाग को समझें। अगर मैं अपनी मुख्य गतिविधि से REQUEST_CODE भेजता हूं और इस REQUEST_CODE कोActivityResult() में वापस प्राप्त करता हूं जो मेरी मुख्य गतिविधि में भी है। तुलना का तर्क क्या है?(requestCode == REQUEST_CODE_CHEC) –

+0

मूल विचार है, AtctivityResult() वापस आने वाले इरादे से प्राप्त होने वाले हर इरादे को पकड़ लेगा। अब, यह निर्धारित करने के लिए कि कौन सा इरादा वापस आ रहा है, आप इसे पहले से मौजूद REQUEST_CODE के साथ तुलना करके 'requestCode' का उपयोग करके उपयोग करते हैं। कभी-कभी, एक गतिविधि की उम्मीद है कि एक इरादा वापस आ रहा है, कुछ और समय, 3 से अधिक। – ariefbayu

1

तीसरा पैरामीटर इरादा है, जिसे आपने उप-गतिविधि (दूसरी गतिविधि, जो खत्म होने जा रहा है) से भेजा है।

यदि आप कुछ गणना करना चाहते हैं या उप-गतिविधि में कुछ उपयोगकर्ता नाम/पासवर्ड प्राप्त करना चाहते हैं और आप परिणाम को मुख्य गतिविधि में भेजना चाहते हैं, तो आप डेटा को इरादे में रखना चाहते हैं और समाप्त होने से पहले मुख्य गतिविधि पर वापस आ जाएंगे()।

इसके बाद आप उद्देश्य पैरामीटर के परिणामस्वरूप मुख्य गतिविधि में सक्रियता अनुसंधान (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"); 

    } 
    } 

subActivity ::

@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(); 
} 
संबंधित मुद्दे