जब वापस दबाया जाता है तो 2 गतिविधि से पहली गतिविधि तक डेटा कैसे पारित करें? - एंड्रॉयड


184

मैंने 2 गतिविधियाँ, गतिविधि 1 और गतिविधि 2 की हैं ।

में Activity1मैं एक है बटन और TextView । जब बटन पर क्लिक किया जाता है तो गतिविधि 2 शुरू हो जाती है।

में Activity2मैं एक है EditText

मैं डेटा से लिया गया प्रदर्शित करना चाहते हैं EditText में activity2 में TextView में Activity1 जब पीछे से दबाया जाता है activity2

किसी को इस काम को बनाने के लिए कोड के साथ मेरी मदद कर सकते हैं?


2
के बारे में पढ़ेंstartActivityForResult
दिमित्री ज़ैतसेव


एक और तरीका: Activity2मूल्य को लगातार भंडारण में रखता है और Activity1इसे वहां से पढ़ता है।
हेनरी

@kumareloaded: क्या आप कृपया यहां समाधान साझा कर सकते हैं पास्टेबिन मेरे देश में अब तक काम नहीं कर रहा है।
user1903022

जवाबों:


326

गतिविधि 2 के साथ गतिविधि 2 शुरू करें startActivityForResultऔर गतिविधि setResult2 से गतिविधि 1 तक डेटा वापस भेजने के लिए विधि का उपयोग करें । गतिविधि 1 में आपको गतिविधि 2 से डेटा के साथ onActivityResultअद्यतन करने के लिए ओवरराइड करना होगा ।TextViewEditText

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

गतिविधि 1 में , गतिविधि 2 को इस प्रकार शुरू करें:

Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, 1);

में activity2 , उपयोग setResultडेटा भेजने के लिए वापस:

Intent intent = new Intent();
intent.putExtra("editTextValue", "value_here")
setResult(RESULT_OK, intent);        
finish();

और गतिविधि 1 में , के साथ डेटा प्राप्त करें onActivityResult:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
         if(resultCode == RESULT_OK) {
             String strEditText = data.getStringExtra("editTextValue");
         }     
    }
} 

आप भी उपयोग कर सकते हैं SharedPreferences क्रियाएँ के बीच डाटा साझा करने के लिए।


1
धन्यवाद आदमी, क्या आप मुझे इसी तरह की कोडिंग हिस्सा SharedPreferences ही :) करने के लिए के साथ मदद कर सकता है कर सकते हैं अगर
kumareloaded

1
@kumareloaded: सबसे स्वागत दोस्त। यदि आप भी ऐसा ही करना चाहते हैं SharedPreferencesतो इस उदाहरण को देखें
ρяєρ Kя K

2
@kumareloaded: यदि आपने मुझे pastebin.com का उपयोग करके क्या किया है, दोनों वर्गों के कोड लिंक दिए हैं, तो मैं आपका कोड संपादित
करूंगा

1
@kumareloaded: अब इस कोड का उपयोग करें और यह काम करेगा
ρяєρ Kя K

1
@ ρя shareρєяK: क्या आप अपने उत्तर में SharedPref का उपयोग करके उपरोक्त परिदृश्य के लिए कोड साझा कर सकते हैं। पास्टेबिन कई देशों में नहीं खुलता है। इसे यहाँ साझा करने से बहुत मदद मिलेगी, धन्यवाद।
user1903022

26

गतिविधि 1 को गतिविधि 2 के साथ शुरू करना चाहिए startActivityForResult()

गतिविधिsetResult() 2 को गतिविधि 1 में डेटा वापस भेजने के लिए उपयोग करना चाहिए ।

में activity2 ,

@Override
public void onBackPressed() {
    String data = mEditText.getText();
    Intent intent = new Intent();
    intent.putExtra("MyData", data);
    setResult(resultcode, intent);
}

गतिविधि 1 में ,

onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if(resultCode == RESULT_OK) {
            String myStr=data.getStringExtra("MyData");
            mTextView.setText(myStr);
        }
    }
}

@ स्वेम मैं अनुमान लगाता हूं क्योंकि आपने गतिविधि 1 का उल्लेख नहीं किया था, फिर भी गतिविधि 2 को startactivityforresult के साथ शुरू करना चाहिए।
लुटिफ़टेकिन

1
@LutfiTekin: यह बहुत अच्छी तरह से हो सकता है! इस पर ध्यान दिलाने के लिए धन्यवाद! मेरे उत्तर का संपादन किया। :)
स्वयंवर

17

अन्य उत्तर से काम नहीं कर रहे थे, जब मैं डाल setResultमें onBackPressed। सुपर को कॉल करना onBackPressedऔर कॉल को finishमैन्युअल रूप से समस्या हल करना:

@Override
public void onBackPressed() {
    //super.onBackPressed();
    Intent i = new Intent();
    i.putExtra(EXTRA_NON_DOWNLOADED_PAGES, notDownloaded);
    setResult(RESULT_OK, i);
    finish();
}

और पहली गतिविधि में:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == QUEUE_MSG) {
        if (resultCode == RESULT_OK) {
            Serializable tmp = data.getSerializableExtra(MainActivity.EXTRA_NON_DOWNLOADED_PAGES);
            if (tmp != null)
                serializable = tmp;
        }
    }
}

6

इसे startActivityforResult. वैकल्पिक के रूप में लें। लेकिन ध्यान रखें कि ऐसे मामलों के लिए यह दृष्टिकोण प्रदर्शन के मामले में महंगा हो सकता है लेकिन कुछ मामलों में आपको उपयोग करने की आवश्यकता हो सकती है।

गतिविधि 2 में,

@Override
public void onBackPressed() {
String data = mEditText.getText();
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
Editor editor = sp.edit();
editor.putString("email",data);
editor.commit();
}

गतिविधि 1 में,

 @Override
public void onResume() {
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
String  dataFromOtherAct= sp.getString("email", "no email");
} 

इसका उपयोग ऑब्जेक्ट (केवल स्ट्रिंग, बूलियन, आदि) के लिए नहीं किया जा सकता है
FindOut_Quran

1
मेरे मामले में मैं मेनऐक्टिविटी में एक सूची आइटम से एक गतिविधि शुरू कर रहा था और उपयोगकर्ता को उस सूची आइटम पर डेटा वापस लाना चाहता था। startActivityForResult () मेरे लिए इस मामले में उपलब्ध नहीं था जहां मैं mContext.startActivity () का उपयोग कर रहा था। यहाँ @katmanco उदाहरण एक सहायक काम था।
दोषपूर्ण

मेरे लिए यह एक बुरा चुनाव है। मौजूद क्रियाForResult
Marlonpya

2

यह आपकी पहली गतिविधि 1 है।

public class Activity1 extends Activity{
private int mRequestCode = 100;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent intent = new Intent(this, Activity2.class);
    startActivityForResult(intent, mRequestCode);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == mRequestCode && resultCode == RESULT_OK){
        String editTextString = data.getStringExtra("editText");
    }
}
}

यहां से आप startActivityForResult (mRequestCode, Activity2.class) का उपयोग करके अपनी गतिविधि 2.क्लास शुरू कर रहे हैं ;

अब यह आपकी दूसरी गतिविधि है, नाम है गतिविधि 2

public class Activity2 extends Activity {
private EditText mEditText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //mEditText = (EditText)findViewById(R.id.edit_text);

    Intent intent = new Intent();
    intent.putExtra("editText", mEditText.getText().toString());
    setResult(RESULT_OK, intent);
}

}

अब जब आपने अपनी दूसरी गतिविधि के साथ किया तो आप सेटबेल्ट () विधि, onBackPress () या किसी भी बटन पर क्लिक करें जब आपका गतिविधि 2 नष्ट हो जाएगा तब आपकी गतिविधि 1 की कॉल बैक विधि onActivityResult () वहां से कॉल करेगी, जो आप इरादे से अपना डेटा प्राप्त कर सकते हैं। ..

आशा है कि यह आपकी मदद करेगा ... :)


2

यह पढ़हो:

  1. परिणाम onActivityResult () पर लौटें
  2. एक तथाकथित गतिविधि से परिणाम प्राप्त करना - शुरुआती के लिए एंड्रॉइड ट्यूटोरियल

ये लेख आपको यह समझने में मदद करेंगे कि एंड्रॉइड में दो गतिविधियों के बीच डेटा कैसे पास किया जाए।


2

अपने FirstActivity से StartActivityForResult () मेथड का उपयोग करके सेकंडएक्टिविटी को कॉल करें।

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

Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);

अपने SecondActivity में वह डेटा सेट करें जिसे आप FirstActivity में वापस करना चाहते हैं। यदि आप वापस नहीं लौटना चाहते हैं, तो कोई भी सेट न करें।

उदाहरण के लिए: सेकंडएक्टिविटी में यदि आप डेटा वापस भेजना चाहते हैं:

Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();

यदि आप डेटा वापस नहीं करना चाहते हैं:

Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();

अब अपने FirstActivity क्लास में onActivityResult () मेथड के लिए निम्न कोड लिखें।

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){
            String result=data.getStringExtra("result");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            //Write your code if there's no result
        }
    }
}

1

टीएल; डीआर उपयोग Activity.startActivityForResult

लंबा जवाब:

आपको एंड्रॉइड डेवलपर डॉक्यूमेंट को पढ़कर शुरू करना चाहिए। विशेष रूप से आपके प्रश्न का विषय के Starting Activities and Getting Resultsअनुभाग में शामिल किया गया हैActivity प्रलेखन ।

उदाहरण के लिए कोड, Android SDK अच्छे उदाहरण प्रदान करता है। इसके अलावा, यहां अन्य उत्तर आपको उपयोग करने के लिए नमूना कोड के छोटे स्निपेट देते हैं।

हालाँकि, यदि आप विकल्प की तलाश कर रहे हैं, तो इस SO प्रश्न को पढ़ें । यह कैसे startActivityForResultsटुकड़ों के साथ उपयोग करने के बारे में एक अच्छी चर्चा है , साथ ही गतिविधियों के बीच डेटा पारित करने के लिए युगल othe दृष्टिकोण है।


0

और मैं, तो मैं ऐसा करने के बाद पहली बार मैं एक बनाया है एक मुद्दा है जो मैं एक शीतल बटन जो मैंने बनाया था और सॉफ़्टकी जो हर Android डिवाइस में डिफ़ॉल्ट है में इस भेजने के डेटा प्रकार करना चाहता था है, Intentमें मेरे "ए" Activity:

            Intent intent = new Intent();
            intent.setClass(context, _AddNewEmployee.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            startActivityForResult(intent, 6969);
            setResult(60);

फिर अपनी दूसरी गतिविधि में, मैंने अपने "बी" में एक फ़ील्ड घोषित किया है Activity:

private static int resultCode = 40;

उसके बाद मैंने अपना अनुरोध सफलतापूर्वक किया या जब भी मैं "ए" गतिविधि को बताना चाहता था कि यह काम सफलतापूर्वक किया जाता है, तो परिणाम के मूल्य को उसी में बदल दें जो मैंने "ए" में कहा है Activityजो मेरे मामले में "60" है। फिर:

private void backToSearchActivityAndRequest() {
    Intent data = new Intent();
    data.putExtra("PhoneNumber", employeePhoneNumber);
    setResult(resultCode, data);
    finish();
}

@Override
public void onBackPressed() {
    backToSearchActivityAndRequest();
}

पुनश्च: याद रखें Superकि यदि आप इसे ठीक से काम करना चाहते हैं, तो ऑनबैकपॉक्ड विधि से हटा दें ।

तो मुझे onActivityResultअपने "ए" गतिविधि में भी विधि को कॉल करना चाहिए :

   @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 6969 && resultCode == 60) {
            if (data != null) {
                    user_mobile = data.getStringExtra("PhoneNumber");
                    numberTextField.setText(user_mobile);
                    getEmployeeByNumber();
            }
        }
    }

यह है, आशा है कि यह आपकी मदद करता है। #HappyCoding;

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.