Android: किसी गतिविधि की वापसी कैप्चर करना


82

मेरे पास नई गतिविधियों को शुरू करने के बारे में एक सवाल है। इससे वह उबल पड़ा। मेरे पास एक दृश्य पर 3 टैब हैं

A) contains gMap activity
 B) camera activity
 C) some random text fields.

आवश्यकता यह है कि आवेदन पोर्ट्रेट मोड में चलता है।

सभी 3 टैब उम्मीद के अनुसार काम करते हैं / कैमरा पूर्वावलोकन सतह (बी) के अपवाद। इसे 90 डिग्री पर घुमाया जाता है। वे इसे सही बनाने के लिए केवल एप्लिकेशन को परिदृश्य पर सेट करते हैं, जो मेरे सभी टैब को चारों ओर फेंकता है, और बहुत अधिक अविश्वसनीय है।

मेरा समाधान यह है: प्रतिस्थापित करें

एक नियमित गतिविधि के साथ मेरी कैमरा गतिविधि जो खाली w / का अपवाद है

Intent i = new Intent(this,CameraActivity.class);
    startActivity(i);

यह मेरा CameraActivity लॉन्च करता है। और वह ठीक काम करता है। मुझे एक रैखिक लेआउट करना था और इसमें 3 छवियां शामिल थीं जो वास्तविक टैब की तरह दिखती हैं, इसलिए मैं स्क्रीन को परिदृश्य में घुमाते हुए टैब के संचालन की नकल कर सकता हूं और दृश्यों को चित्र के रूप में रख सकता हूं। उपयोगकर्ता अगले टैब को प्रदर्शित करने के लिए किसी एक चित्र (बटन) पर क्लिक कर सकता है। यह मेरा मुद्दा है। यह एक टैब में 'रिक्त गतिविधि' पर लौटते हुए मेरी 'कैमरा गतिविधि' से बाहर निकल जाना चाहिए, जहां मेरी छवि से हटाए गए टैब पर क्लिक करने के लिए इसकी व्याख्या की जानी चाहिए।

मुख्य बात यह है कि जब वह लौटता है, तो वह एक टैब के नीचे एक खाली (काले) पृष्ठ पर लौटता है (क्योंकि यह 'खाली' है)। मैं उस पृष्ठ पर वापस कैसे वापस आ सकता हूं, जिसे गतिविधि कहा जाता है, और फिर देखें कि उन्होंने क्या कार्रवाई की?

मैं एक onclicklistener सेट कर सकता हूं, जहां मैं कैमरा गतिविधि से बाहर निकलने के लिए क्लिक की जा रही नकली टैब (छवियों) का जवाब दे सकता हूं। बाहर निकलने पर, टैब को अपडेट करना चाहिए ताकि आप वापस लौटें। कोई सुझाव?

धन्यवाद,

जवाबों:


159

मैं इस बात पर ध्यान केन्द्रित करूंगा कि अपने कार्यक्षेत्र को कैसे हल किया जाए ताकि वह जैसा चाहे वैसा व्यवहार करे।

एक गतिविधि पर किए गए कार्यों को दूसरे के भीतर कैप्चर करने के लिए तीन चरणों की आवश्यकता होती है।

के startActivityForResultबजाय का उपयोग करके एक उपसक्रियता के रूप में द्वितीयक गतिविधि (आपकी 'कैमरा गतिविधि') को लॉन्च करें startActivity

Intent i = new Intent(this,CameraActivity.class);    
startActivityForResult(i, STATIC_INTEGER_VALUE);

सबटक्टिविटी (कैमरा एक्टिविटी) के भीतर, जब उपयोगकर्ता किसी अलग टैब छवि को क्लिक करता है, तो गतिविधि को बंद करने के बजाय, आपको एक नया इंटेंट बनाने और टैब के इंडेक्स को प्रदर्शित करने की आवश्यकता होती है, जब आप एक्स्ट्रा बंडल का उपयोग करके मूल ऐप पर वापस आते हैं। । कैमरा गतिविधि को बंद करने के लिए setResultकॉल finishकरने से पहले इसे माता-पिता के पास वापस भेज दें ।

resultIntent = new Intent(null);
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, tabIndexValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();

अंतिम गतिविधि कॉलिंग गतिविधि में है, onActivityResultकैमरा गतिविधि से कॉलबैक सुनने के लिए ओवरराइड करें। आपके द्वारा प्रदर्शित टैब का सूचकांक निर्धारित करने के लिए दिए गए आशय से अतिरिक्त प्राप्त करें।

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) {     
  super.onActivityResult(requestCode, resultCode, data); 
  switch(requestCode) { 
    case (STATIC_INTEGER_VALUE) : { 
      if (resultCode == Activity.RESULT_OK) { 
      int tabIndex = data.getIntExtra(PUBLIC_STATIC_STRING_IDENTIFIER);
      // TODO Switch tabs using the index.
      } 
      break; 
    } 
  } 
} 

3
आप अनुरोध पर क्यों स्विच करते हैं, फिर जांच करें कि क्या अनुरोधकोड == RESULT_OK? संपादित करें: कोई बात नहीं, मैं requestCode / resultCode अंतर देखता हूं।
varikin

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