मुझे गतिविधि स्थिति की बचत और पुनर्स्थापना के बारे में पता है। लेकिन मैं जो करना चाहता हूं वह एक दृश्य की स्थिति को सहेजना और बहाल करना है। मैं इसमें एक कस्टम दृश्य और दो overrided तरीकों:दृश्य स्थिति एंड्रॉइड को सहेजना और बहाल करना
@Override
protected void onRestoreInstanceState(Parcelable state) {
if (state instanceof Bundle) {
Bundle bundle = (Bundle) state;
currentLeftX = bundle.getInt(CURRENT_LEFT_X_PARAM, 0);
currentTopY = bundle.getInt(CURRENT_TOP_Y_PARAM, 0);
}
super.onRestoreInstanceState(state);
}
@Override
protected Parcelable onSaveInstanceState() {
super.onSaveInstanceState();
Bundle bundle = new Bundle();
bundle.putInt(CURRENT_LEFT_X_PARAM, currentLeftX);
bundle.putInt(CURRENT_TOP_Y_PARAM, currentTopY);
return bundle;
}
मैं इस सहज काम करने की उम्मीद है, लेकिन का सामना करना पड़ा और त्रुटि:
Caused by: java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class android.os.Bundle instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/mapViewId. Make sure other views do not use the same id. at android.view.View.onRestoreInstanceState(View.java:6161)
लेकिन इस दृश्य मेरी गतिविधियों में से एक है। तो, मैं पूछ रहा हूं:
दृश्य की स्थिति को सहेजने का सही तरीका क्या है?
मैं की वजह से कैसे हास्यास्पद एंड्रॉयड के डिजाइन है हंसी करना पड़ा। विधि राज्य की अपेक्षा नहीं करता *** स्पष्ट रूप से ***, यह *** स्पष्ट रूप से *** *** पार्ससेल *** नामक एक इंटरफ़ेस की अपेक्षा करता है। और हाँ हम एक वैध *** पार्ससेल *** वापस कर देते हैं जो *** बंडल *** द्वारा कार्यान्वित किया जाता है। लेकिन यह एक हास्यास्पद कारण के लिए विफल रहा। मैंने .NET में इस तरह के डिज़ाइन का कभी सामना नहीं किया है, जब यह एक इंटरफ़ेस की अपेक्षा करता है, तो अगर हम उस सटीक इंटरफ़ेस को वापस करते हैं तो कोई अपवाद नहीं होना चाहिए। अपवाद को कुछ और समझने के लिए कुछ और कहना चाहिए =))) एंड्रॉइड एक बड़ा उदाहरण है कि *** खराब *** डिज़ाइन आपको परेशान कर सकता है। –