2010-12-22 11 views
16

यह दो दिनों से मुझे मार रहा है। मेरे पास एक मुख्य गतिविधि ए है जो दूसरी गतिविधि बी कहता है। गतिविधि बी बस उपयोगकर्ता को एक सूचीदृश्य के साथ प्रस्तुत करता है। जब मैं सूची दृश्य पर कोई आइटम दबाता हूं, तो मैं चाहता हूं कि कुछ स्ट्रिंग्स को मुख्य गतिविधि ए और एक्टिव बी पर समाप्त कर दिया जाए।Android onActivityResult हमेशा 0

समस्या यह है कि मुझे हमेशा 0 का परिणाम कोड मिलता है और डेटा बंडल शून्य होता है। मैं वास्तव में समझ में नहीं आता कि यह क्यों हो रहा है।

मेरा कोड यहां है।

परिणाम के लिए प्रारंभ गतिविधि बी;

Test.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(recipeActivity.this, BrowseLoadRecipes.class); 
      startActivityForResult(i, RECIPE_CHOOSER); 
    } 
    }); 

यह दूसरी गतिविधि ठीक शुरू करता है। गतिविधि बी एक सूचीदृश्य को पॉप्युलेट करता है और जब मैं किसी आइटम पर क्लिक करता हूं तो मैं कॉलिंग गतिविधि ए

इस समय कोई भी पाठ भेजता हूं, इसलिए मैंने गतिविधि बी में निम्नलिखित का उपयोग किया;

 lv.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
     Bundle bundle = new Bundle(); 
     bundle.putString("TEXT", "Please work... pleeeeaasee"); 
     Intent mIntent = new Intent(); 
     mIntent.putExtras(bundle); 
     setResult(RESULT_OK, mIntent); 
     finish(); 
    } 
    }); 

कॉलिंग गतिविधि में मेरे पास निम्नानुसार वापसी के लिए निम्नलिखित सुनना है;

protected void onActivityResult(int requestCode, int resultCode, 
     Intent data) { 
      switch(requestCode) { 
      //TODO 
      case RECIPE_CHOOSER: 
       Toast.makeText(getApplicationContext(), "In recipe return", Toast.LENGTH_SHORT).show(); 
       Toast.makeText(getApplicationContext(), "resultCode is " + String.valueOf(resultCode), Toast.LENGTH_SHORT).show(); 
       if (resultCode == RESULT_OK) { 
       Bundle b = getIntent().getExtras(); 

       Toast.makeText(getApplicationContext(), "Returned " + b.getString("TEXT"), Toast.LENGTH_LONG).show(); 
       } 
       if (resultCode == RESULT_CANCELED) { 

        } 
       break; 

       } 
      } 
     } 

मैं देख सकता हूँ कि अनुरोध कोड सही तरीके से दिया जाता है, लेकिन resultcode हमेशा एक 0 और डेटा हमेशा एक रिक्त है।

मैं डिबग के माध्यम से भाग गया है और setResult अपना काम कर रहा है और बंडल वास्तव में डेटा मैं गुजर रहा हूँ है, लेकिन यह रास्ते में कुछ बिंदु पर खो जाता है।

क्या मैनिफेस्ट में कुछ ऐसा है जो मुझे याद आ रहा है या कुछ। इस परियोजना पर अब तक मेरी प्रगति हुई है।

किसी भी मदद की सराहना की जाएगी।

धन्यवाद, डीन

उत्तर

15

अपनी सूची गतिविधि में, onItemClickListener साथ setResult लाइनों की जगह निम्न प्रयास करें:

if (getParent() == null) { 
    setResult(Activity.RESULT_OK, data); 
} 
else { 
    getParent().setResult(Activity.RESULT_OK, data); 
} 

मैं सोच रहा हूँ वहाँ एक माता पिता गतिविधि है जो कि तुम क्या करने की आवश्यकता है कि क्या करने के लिए डेटा के लिए बाध्य नहीं है और अपने दिए गए डेटा के संबंध पर ....

+0

मुझे लगता है कि यह काम करने जा रहा है। मैं इसे अभी आज़माउंगा और आपको पांच मिनट में वापस ले जाऊंगा। उत्तर के लिए धन्यवाद। – Dean

+3

डेव ... अगर मैं अभी तुम्हारे साथ था तो मैं आपको प्यारा ठंडा पिंट खरीदूंगा। यह पूरी तरह से काम किया। धन्यवाद फिर से ... – Dean

+1

इस बारे में सोचने के बाद अब मुझे पता है कि मेरा मूल कोड क्यों काम नहीं कर रहा था। जिस उद्देश्य का मैं पहले आग लगाता हूं (गतिविधि बी) वास्तव में केवल एक फ्रंट टैब धारक इरादा है जो दो अलग-अलग टैबों पर दो और इरादे शुरू करता है (स्थानीय टैब देखने के लिए पहला टैब, वेब स्थित फ़ाइलों को देखने के लिए दूसरा)। मुख्य वापसी का इरादा पहला इरादा होना चाहिए था, इसलिए डेविस उत्कृष्ट उत्तर मुझे माता-पिता को वापस क्यों इंगित करता है। मैं आज रहता था और लीयर करता था। – Dean

5

परिणाम निर्धारित किया है।

आप कार्य करें:

Bundle b = getIntent().getExtras(); 

लेकिन "getIntent()" आशय है कि इस गतिविधि शुरू देता है। आप गतिविधि आप परिणाम के लिए शुरू से दिए गए डेटा चाहते हैं, बस डेटा जो

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
-3

आपका कोड पूरी तरह से काम कर रहा है के लिए पारित कर दिया है ........ ले

in u Activity B 
use 
    setResult(0, mIntent);insted of setResult(RESULT_OK, mIntent); 
in your Activity A: 
use 
case 0: insted case RECIPE_CHOOSER: and 
use System.out.println(b.getString("TEXT")); 

आपको

के रूप में आउटपुट मिलेगा कृपया काम करें ...pleeeeaasee

+6

यह समस्या को हल कर रहा है , वास्तव में। 0 RESULT_CANCELED गणना के लिए मान है, न कि RESULT_OK एक। और गतिविधि बी से कोई भी वापसी (जब कॉलिंग फिनिश() को कॉल किया जाता है) जिसके पास परिणाम कोड सेट नहीं होता है स्वचालित रूप से RESULT_CANCELED पर सेट हो जाता है – jaseelder