2012-12-27 24 views
16

मैं Parcelable के उपयोग के माध्यम से राज्य को अपने Fragment में सहेजने की कोशिश कर रहा हूं।Parcel.readStringArray() के लिए पैरामीटर क्या है?

यह नेतृत्व निम्न कोड के लिए जब मुझे लगता है कि मैं Parcelable में सहेजा एक स्ट्रिंग सरणी वापस पाने के लिए चाहते हैं:

public MyObject createFromParcel(Parcel in) { 
      titles=in.readStringArray(???); 
} 

अब readStringArray एक पैरामीटर की जरूरत है, एक String[] ... लेकिन क्यों? यह सिर्फ स्ट्रिंग्स को दे सकता है जिसे मैंने इसमें संग्रहीत किया था। मुझे कोई प्राथमिकता नहीं है कि कितने थे, इसलिए यह बेकार है। :(

documentation कहते हैं निम्नलिखित:

है यही कारण है, कुछ भी नहीं

संपादित करें:। को भी यही समस्या है: मैं writeBundle()/readBundle() का उपयोग करने और डाल समाप्त हो गया String[]Bundle में

उत्तर

9

यहां एक कार्यान्वयन है एंड्रॉइड 4.1.2:

public final void readStringArray(String[] val) { 
    int N = readInt(); 
    if (N == val.length) { 
     for (int i=0; i<N; i++) { 
      val[i] = readString(); 
     } 
    } else { 
     throw new RuntimeException("bad array lengths"); 
    } 
} 

तो यह दिए गए सरणी के मानों को लिखता है। और कुछ भी नहीं देता है।

+0

धन्यवाद! लेकिन ... वे सिर्फ एक नई सरणी क्यों नहीं लौटते? – Maarten

+1

@ मार्टन पता नहीं है। नया सरणी बना सकता है धीमा है। इसके अलावा मेरे पास स्रोतों में 'readStringArray' विधि का दूसरा संस्करण है जो कोई तर्क नहीं देता है और सरणी देता है। लेकिन मैं इसे डॉक्टर में नहीं देखता और इसका उपयोग नहीं कर सकता। –

+0

क्या यह आपके लिए काम करता है? मुझे लगता है कि आपको @ हुन्यादिम उत्तर स्वीकार करना चाहिए मैंने कोशिश की और यह सिर्फ मेरे लिए काम किया। – Amt87

43

readStringArray(String[]) के बजाय createStringArray() का उपयोग करें। यह आपको आवश्यक सरणी वापस कर देगा।

+2

@ मार्टन यह समस्या के लिए एक बेहतर ** समाधान ** है, हालांकि, * निकिता बेलोग्लाज़ोव * के उत्तर में समस्या के लिए बेहतर ** व्याख्यान ** शामिल है। –