एंड्रॉइड: गतिविधि को कैसे वापस करना है जो उस गतिविधि को परिणाम देता है जो इसे कहता है?


128

मेरे पास एक Locationगतिविधि है जिसे कई गतिविधियों से बुलाया जा सकता है, जैसे कि Sign upऔर Order। में Locationगतिविधि उपयोगकर्ता, उसके स्थान में प्रवेश करती है तो गतिविधि Locationकि गतिविधि है जो यह कहा जाता है के लिए इस नए स्थान वापस आ जाएगी।

इसलिए जब Sign upगतिविधि गतिविधि को बुलाती है Location, तो उसे गतिविधि को डेटा वापस करना होगा Sign up। दूसरी बार Orderगतिविधि वही करेगी।

ध्यान दें

मुझे पता है कि आप मुझे बताएंगे कि मुझे कोड पोस्ट करना चाहिए, लेकिन मैं आपको कोड देने के लिए नहीं कह रहा हूं; मुझे बस कुछ टिप्स, लिंक या अच्छे धागे चाहिए।


आप फ़िनिश () कॉल बैक का उपयोग कर सकते हैं ..
हर्षिद

1
क्या आपने StartActivityForResult developer.android.com/reference/android/app/Activity.html
vinaykumar

@ हर्षिद क्या आप मुझे अधिक जानकारी देंगे, या यदि आपके पास ऐसे लिंक हैं जिनकी सराहना की जाएगी
उपयोगकर्ता उपयोगकर्ता

जवाबों:


253

एक गतिविधि शुरू करने के लिए जिसे कॉलिंग गतिविधि पर वापस लौटना चाहिए, आपको नीचे कुछ करना चाहिए। आपके द्वारा शुरू की गई गतिविधि से परिणाम प्राप्त करने के लिए आपको नीचे दिखाए गए अनुरोध के अनुसार पासकोड दिखाना चाहिए।

startActivityForResult(new Intent(“YourFullyQualifiedClassName”),requestCode);

गतिविधि में आप setData()परिणाम वापस करने के लिए उपयोग कर सकते हैं ।

Intent data = new Intent();
String text = "Result to be returned...."
//---set the data to pass back---
data.setData(Uri.parse(text));
setResult(RESULT_OK, data);
//---close the activity---
finish();

तो फिर पहली गतिविधि में फिर से आप onActivityResult () में नीचे कोड लिखें

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String returnedResult = data.getData().toString();
            // OR
            // String returnedResult = data.getDataString();
        }
    }
}

आपकी टिप्पणी के आधार पर EDIT: यदि आप तीन स्ट्रिंग्स को वापस करना चाहते हैं, तो उरी का उपयोग करने के बजाय इरादे से कुंजी / मूल्य जोड़े का उपयोग करके इसका पालन करें।

Intent data = new Intent();
data.putExtra("streetkey","streetname");
data.putExtra("citykey","cityname");
data.putExtra("homekey","homename");
setResult(RESULT_OK,data);
finish();

उन्हें नीचे की तरह onActivityResult में प्राप्त करें :

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String street = data.getStringExtra("streetkey");
            String city = data.getStringExtra("citykey");
            String home = data.getStringExtra("homekey");
        }
    }
}

क्या कहा आपने मुझे आपकी अंतिम टिप्पणी समझ में नहीं आती, क्षमा करें, मैं अच्छा अंग्रेजी नहीं हूं, मैं अब आपके कोड की कोशिश कर रहा हूं, मैं क्या requestcodeकोई पूर्णांक डाल सकता हूं?
उपयोगकर्ता उपयोगकर्ता

1
मैंने कहा, नो प्रॉब्लम्स (एनपी) और जैसा कि आपने कहा था कि इसे लागू करने में आपको देर हो सकती है, मैंने जवाब दिया कि अपना समय खुद लें और फिर टिप्पणी करें ताकि मुझे सूचित किया जा सके। अनुरोध पर आ रहा है, हाँ आप पूर्णांक जैसे अंतर मान दे सकते हैं।
कंठ

हाँ यह सही है, मैं आपके उत्तर को स्वीकार कर रहा हूँ, बहुत-बहुत धन्यवाद, मैं आपको धन्यवाद देना चाहता हूँ, अगर कोई तरीका है तो बस स्ट्रिंग न भेजें, मैं 3 स्ट्रिंग्स भेजना चाहता हूं, जैसे "शहर", "सड़क", " घर ", स्ट्रिंग्स को लेबल करने का एक तरीका है?
यूजर यूजर

आपका उत्तर बहुत उत्कृष्ट है, यदि आप चाहें, तो शीर्षक को संपादित करें, तो कई उपयोगकर्ता इसे खोज सकते हैं
उपयोगकर्ता उपयोगकर्ता

मैं इस इरादे को बनाने के लिए देख रहा था : new Intent(this, OtherActivity.class);मैं एक गतिविधि में इस कोड का उपयोग कर सकता हूं।
उपयोगकर्ता

3

यदि आप समाप्त करना चाहते हैं और बस एक resultCode(बिना डेटा) जोड़ते हैं , तो आप setResult(int resultCode)पहले कॉल कर सकते हैं finish()

उदाहरण के लिए:

...
if (everything_OK) {
    setResult(Activity.RESULT_OK); // OK! (use whatever code you want)
    finish();
}
else {
   setResult(Activity.RESULT_CANCELED); // some error ...
   finish();
}
...

फिर अपनी कॉलिंग गतिविधि में, यह देखने के resultCodeलिए कि क्या हम ठीक हैं , की जाँच करें ।

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == someCustomRequestCode) {
        if (resultCode == Activity.RESULT_OK) {
            // OK!
        }
        else if (resultCode = Activity.RESULT_CANCELED) {
            // something went wrong :-(
        }
    }
}

गतिविधि को कॉल करना न भूलें startActivityForResult(intent, someCustomRequestCode)


4
उस मूल्य का Activity.RESULT_OKवास्तव में -1, उस मामले में है जो किसी को भ्रमित करता है। मैं सिर्फ Activityस्थिरांक का उपयोग करने का सुझाव
दूंगा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.