आपको अपनी कस्टम ऑब्जेक्ट्स के ऐरेलिस्ट को पास करने के लिए एक नई कक्षा बनाने की आवश्यकता नहीं है। आपको बस अपनी ऑब्जेक्ट के लिए पार्सेलबल क्लास को कार्यान्वित करना चाहिए और Bundle#putParcelableArrayList()onSaveInstanceState()
और onRestoreInstanceState()
में उपयोग करना चाहिए। यह विधि पार्ससेल के एक ऐरेलिस्ट को स्वयं ही संग्रहित करेगी।
क्योंकि Parcelables (और Serializables और बंडल) का विषय कभी कभी मेरे सिर में चोट लगी है, यहाँ एक ArrayList एक बंडल में संग्रहीत कस्टम Parcelable वस्तुओं से युक्त की एक बुनियादी उदाहरण है। (यह, & पेस्ट runnable कटौती नहीं लेआउट आवश्यक है।)
कार्यान्वयन Parcelable
public class MyObject implements Parcelable {
String color;
String number;
public MyObject(String number, String color) {
this.color = color;
this.number = number;
}
private MyObject(Parcel in) {
color = in.readString();
number = in.readString();
}
public int describeContents() {
return 0;
}
@Override
public String toString() {
return number + ": " + color;
}
public void writeToParcel(Parcel out, int flags) {
out.writeString(color);
out.writeString(number);
}
public static final Parcelable.Creator<MyObject> CREATOR = new Parcelable.Creator<MyObject>() {
public MyObject createFromParcel(Parcel in) {
return new MyObject(in);
}
public MyObject[] newArray(int size) {
return new MyObject[size];
}
};
}
आप onRetainNonConfigurationInstance()
उपयोग कर सकते हैं सहेजें/पुनर्स्थापित स्टेट्स
public class Example extends ListActivity {
ArrayList<MyObject> list;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState == null || !savedInstanceState.containsKey("key")) {
String[] colors = {"black", "red", "orange", "cyan", "green", "yellow", "blue", "purple", "magenta", "white"};
String[] numbers = {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"};
list = new ArrayList<MyObject>();
for(int i = 0; i < numbers.length; i++)
list.add(new MyObject(numbers[i], colors[i]));
}
else {
list = savedInstanceState.getParcelableArrayList("key");
}
setListAdapter(new ArrayAdapter<MyObject>(this, android.R.layout.simple_list_item_1, list));
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putParcelableArrayList("key", list);
super.onSaveInstanceState(outState);
}
}
धन्यवाद! हालांकि, मैं 'निजी MyObject (पार्सल इन) { रंग = in.readString() पर खो गया हूं; संख्या = in.readString(); } 'बिट ... स्ट्रिंग्स के लिए यह आसान है, लेकिन मैं अपनी कस्टम सरणीसूची कैसे पढ़ूं? 'in.readArrayList (MyObject.class.getClassLoader()) 'मुझे एक त्रुटि देता है। – Kalina
हम्म, आपके प्रश्न में आपने "कस्टम ऑब्जेक्ट्स के साथ एक ऐरेलिस्ट" के बारे में पूछा, जिसका अर्थ है 'ऐरेलिस्ट', जो यह उत्तर 'पार्ससेल योग्य' निर्माता 'में हैडल करता है; हालांकि आपकी टिप्पणी ने अभी पूछा है कि "MyArrayList' का अर्थ" मैं अपनी कस्टम सरणी सूची कैसे पढ़ूं "। आप किस वर्ग का विस्तार करने की कोशिश कर रहे हैं? (तकनीकी होने के लिए खेद है, लेकिन मैं आपको सबसे अच्छा जवाब देना चाहता हूं।) –
Sam
क्षमा करें, मेरा मतलब है ऐरेलिस्ट –
Kalina