2011-10-04 32 views
7

मैं एक एंड्रॉइड प्रोजेक्ट बनाने की कोशिश कर रहा हूं जिसमें साझा कोड है जो दूसरों द्वारा उपयोग किया जाएगा। इस परियोजना में मेरे पास केवल पीओजेओ है और कोई एंड्रॉइड विशिष्ट वर्ग नहीं है।पर गतिविधि गतिविधि के बाहर गतिविधि गतिविधि

कुछ कार्यक्षमताओं में कुछ गतिविधियों को कॉल करने की आवश्यकता होती है और परिणाम पर निर्भर करता है। मेरे पीओजेओ कक्षाओं का उपयोग करते समय कॉलिंग गतिविधि का संदर्भ मिलता है, लेकिन यह रन टाइम पर हो रहा है और मेरे पास उन गतिविधियों के कार्यान्वयन पर कोई नियंत्रण नहीं है।

मेरे समस्या यह है कि मैं startActivityForResult लेकिन मैं onActivityResult जोड़ने, जो हो सकता है बुला गतिविधि में मौजूद है, लेकिन requestCode मैं प्रयोग किया जाता के बारे में पता नहीं है का कोई रास्ता नहीं हो सकता है बुला गतिविधि के संदर्भ में है।

मेरा प्रश्न तब है जब गतिविधि वापस आने पर नियमित जावा वस्तु के भीतर से मुझे कैसे पता चलेगा? चूंकि, जहां तक ​​मैं समझता हूं, मैं केवल गतिविधि कक्षाओं पर पर सक्रियता Result लागू कर सकता हूं।

धन्यवाद!

उत्तर

0

मेरा प्रश्न तब है जब गतिविधि वापस आने पर नियमित जावा वस्तु के भीतर से मुझे कैसे पता चलेगा?

गतिविधि पीओजेओ को कॉल करें, परिणाम की आपूर्ति करें।

मेरे POJO कक्षाएं बुला गतिविधि के संदर्भ जब इस्तेमाल किया, लेकिन वह रन टाइम पर हो रहा है और मैं उन गतिविधियों के कार्यान्वयन पर कोई नियंत्रण नहीं।

तब जो भी "उन गतिविधियों के कार्यान्वयन पर नियंत्रण" में है, उसे गतिविधि को पीओजेओ को कॉल करने की आवश्यकता होगी, परिणाम की आपूर्ति। यह किसी भी अन्य कॉलबैक/श्रोता तंत्र से अलग नहीं है।

+0

ठीक है, मैं कुछ बुरा की कमी के साथ मैं .. क्या कभी मेरी POJO का उपयोग करता है मेरे लिए एक ब्लैक बॉक्स की तरह है निपटने के लिए की जरूरत है , मुझे पता है कि यह मेरे पीओजेओ पर तरीकों का आह्वान करता है और बदले में परिणाम की उम्मीद है। उन गतिविधियों के लिए जिन्हें मैं अपने पीओजेओ के भीतर से कॉल करना चाहता हूं, वे एंड्रॉइड डिवाइस में मौजूद गतिविधियां हैं, जो मेरे नियंत्रण से बाहर हैं .. मुझे बस उन्हें कॉल करने की ज़रूरत है (मान लें कि संपर्क प्राप्त करें) और परिणाम प्राप्त करें । धन्यवाद। –

+0

@ निट्टन टॉमर: "मुझे कुछ ग़लत बाधाएं हैं जिनसे मुझे निपटने की ज़रूरत है" - उन बाधाओं को उठाए जाने की आवश्यकता होगी। आप 'AActivityResult() 'को लागू करने पर अपनी कुछ गतिविधि को छोड़कर 'startActivityForResult()' का उपयोग नहीं कर सकते हैं। – CommonsWare

1

आप इस सेटअप के साथ काफी कुछ समस्याएं हैं, लेकिन यह कैसे आप आरंभ करने के लिए चाहते हो सकता है है:

आप अपनी परियोजना में एक गतिविधि है जो गतिविधि आप चाहते हैं शुरू करने की तुलना में और कुछ नहीं करता है शामिल करने के लिए होगा परिणाम प्राप्त करने और इसे विश्व स्तर पर सुलभ भंडारण (जैसे सिंगलटन या स्थिर क्षेत्र) में संग्रहीत करने के लिए।

class Pojo { 
    static final ConditionVariable gate = new ConditionVariable(); 
    static int result; 

    int m(Context context) { 
     context.startActivity(new Intent(context, ForwarderActivity.class)); 
     gate.block(); 
     return result; 
    } 
} 

class ForwarderActivity extends Activity { 
    private boolean started = false; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (!started) { 
      started = true; 
      startActivityForResult(new Intent("ContactsProvider"), 1); 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Pojo.result = resultCode; 
     Pojo.gate.open(); 
    } 
} 

हालांकि कुछ समस्याएं हैं। आपके POJO की विधि की तरह मुख्य (UI) थ्रेड से नहीं कहा जा सकता है, क्योंकि आपको एक सिंक्रोनस कॉल (startActivityForResult()) को एक तुल्यकालिक (Pojo.m()) में परिवर्तित करने की आवश्यकता होती है और जिस गतिविधि से आप जानकारी प्राप्त करना चाहते हैं मुख्य धागे पर शुरू किया जाएगा, इसलिए आप इसे Pojo.m() में अवरुद्ध नहीं कर सकते हैं ...

वैसे भी, कोड काम नहीं करता है, लेकिन आप देख सकते हैं कि आपको वास्तव में क्यों रहना है इस सेटअप के साथ। लेकिन आपको वास्तव में सामग्री प्रदाता की तरह डेटा लाने के कुछ अन्य तरीकों के साथ आने का प्रयास करना चाहिए।

0

शायद लंबित इंटेंट http://developer.android.com/reference/android/app/PendingIntent.html आपकी मदद कर सकता है। मैं अभी भी अपनी समस्या के समाधान के लिए चारों ओर देख रहा हूं और मेरे लिए, यह वर्ग काफी आशाजनक दिखता है।

एक और तरीका अपने स्वयं के वर्ग सार बनाने के लिए हो सकता है और एक विधि onActivityResult है जिसे ओवरराइड करने की आवश्यकता है।बेशक, आपको अपने कोड में परिणाम संसाधित करने में सक्षम होने के लिए जावाडॉक पर भरोसा करना होगा और "कृपया super.onActivityResult को कॉल करें"। लेकिन यदि आपकी कक्षा के उपयोगकर्ता आपके कोड के साथ कुछ सफलता प्राप्त करना चाहते हैं तो उन्हें आपके जावाडॉक निर्देशों का पालन करना चाहिए।

1

मुझे एक ही समस्या है जबकि मैं यूनिटी 3 डी के साथ खेलता हूं, एकता की अपनी गतिविधि (एकता खिलाड़ी) है, मैं इसे किसी कारण से संपादित नहीं करना चाहता हूं। लेकिन खिलाड़ी गतिविधि "onctivityResult" फ़ंक्शन के अंदर कुछ भी नहीं करती है। और मेरे पास छवि पिकर तक पहुंचने के लिए कुछ करना है, मैं छवि पिकर खोलने के लिए "unityPlayer.startActivityForResult" को कॉल कर सकता हूं, लेकिन मेरे स्वयं के "onctivityResult" को कोड करने का कोई तरीका नहीं है।

मुझे लगता है कि क्या हमें आशा है कि कुछ इस तरह है:

OtherActivityClass.onActivityResultListener=function(){My Own CODE}..........OR OtherActivityClass.onActivityResultListener.add(myResultListener)..................

+0

कृपया अपने कोड को बेहतर प्रारूपित करने के लिए कोड ब्लॉक का उपयोग करें – gareththegeek