2016-01-13 6 views
5

मुझे दो अलग-अलग स्क्रीनों से एक गतिविधि शुरू करने की आवश्यकता है जिसमें दो अलग-अलग मॉडल हैं, लेकिन दोनों मॉडलों में कुछ साझा जानकारी है जो मुझे नई गतिविधि में चाहिए। समस्या यह है कि मैं उन मॉडलों को एक ही माता-पिता से विस्तारित नहीं कर सकता, क्योंकि मॉडल में से एक पहले से ही एक माता-पिता को बढ़ाता है। मैंने एक इंटरफ़ेस बनाने के बारे में सोचा है जिसमें साझा विधियां हैं, लेकिन यदि मैं ऐसा करता हूं, तो मैं अगली गतिविधि शुरू करने के लिए आवश्यक बंडल में उस इंटरफ़ेस को कैसे रख सकता हूं?एक नई गतिविधि शुरू करने के लिए बंडल में इंटरफ़ेस रखें

मैं क्रम में कुछ सरलीकृत कोड जोड़ मेरी स्थिति स्पष्ट करने:

public class A extends Model implements CustomInterface { 
    String name; 
    String address; 

    public String getName(){ 
     return name; 
    } 

    public String getAddress() { 
     return address; 
    } 
} 

public class B implements CustomInterface { 
    String name; 

    public String getName() { 
     return name; 
    } 
} 

public interface CustomInterface { 
    String getName(); 
} 

मेरे समस्या यह है कि मैं दोनों मॉडलों के बीच साझा जानकारी के साथ एक बंडल के साथ एक गतिविधि शुरू करने की आवश्यकता है। तो, मैं एक बंडल में कस्टमइंटरफेस रखना चाहता हूं। ऐसा कैसे किया जा सकता था?

अग्रिम धन्यवाद।

+1

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

+1

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

उत्तर

11

तो, मैं एक बंडल

में CustomInterface डाल करने के लिए आप CustomInterface विस्तार Parcelable दे सकता है चाहते हैं। जैसे

public interface CustomInterface extends Parcelable { 
    String getName(); 
} 

इस तरह से कक्षाएं CustomInterface को लागू विधि Parcelable इंटरफ़ेस में निर्धारित लागू करता है करना होगा। सही ढंग से लागू हैं, तो आप समस्याओं के बिना चारों ओर उन वस्तुओं को पारित करने में सक्षम हो जाएगा

+1

बिल्कुल, और जब आप पार्ससेल योग्य I को अपनी गतिविधि पुनर्प्राप्त करते हैं, तो आप इसे अपने इंटरफ़ेस पर डाल सकते हैं। – Desdroid

+0

यह सुनिश्चित नहीं है कि क्यों, लेकिन मेरे मामले में, सेवा का उपयोग करके, मुझे ** डब्ल्यू/गतिविधि प्रबंधक प्राप्त हुआ: टाइमआउट निष्पादन सेवा ** ** ई/गतिविधि प्रबंधक द्वारा चेतावनी: साइट.एक्सप्लोर.प्लेयर में एएनआर ** त्रुटि क्योंकि '.getParcelableExtra (कुंजी) 'टाइमआउट के साथ चलता है – HKoncept

0

एक सिंगलटन वर्ग बनाएं, फिर अपने इसे पारित बिना डेटा को साझा कर सकते हैं:

public class A extends Model { 
    String name; 
    String address; 

    public String getName(){ 
     return name; 
    } 

    public String getAddress() { 
     return address; 
    } 

    public String doSomethingWithSharedData(){ 
     MySingleton model = MySingleton.getInstance(); 
     String somedata = model.getSomeData(); 
    } 
} 

public class B { 
    String name; 


    public String getName() { 
     return name; 
    } 

    public String doSomethingDifferentWithSharedData(){ 
     MySingleton model = MySingleton.getInstance(); 
     String somedata = model.getSomeOtherData(); 
    } 
} 
:

public class MySingleton 
{ 
    private static MySingleton instance; 

    public String customVar; 

    public static MySingleton getInstance() 
    { 
     if (instance == null) 
     { 
      // Create the instance 
      instance = new MySingleton(); 
     } 
     // Return the instance 
     return instance; 
    } 

    private MySingleton() 
    { 
     // Constructor hidden because this is a singleton 
    } 

    public void getSomeData() 
    { 
     return something; 
    } 

    public void getSomeOtherData() 
    { 
     return somethingelse; 
    } 
} 
अपनी कक्षाओं में

फिर

+0

पूरे प्रक्रिया जीवन में आवश्यक होने तक स्थिर डेटा को टालना चाहिए। एपीआई एंड्रॉइड प्रदान करता है गतिविधियों के बीच डेटा गुजरने के लिए सिफारिश की है। –

संबंधित मुद्दे