मैं एक कस्टम दृश्य है, मान लें कि यह अपने कोड है:एक्सएमएल लागू करने से पहले देखने का राज्य पुनर्स्थापित विशेषताओं
public class CustomView extends View {
boolean visible;
boolean enabled;
public ScheduleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomView, 0, 0);
try {
visible = a.getBoolean(R.styleable.CustomView_visible, true);
enabled = a.getBoolean(R.styleable.CustomView_enabled, true);
} finally {
a.recycle();
}
// Apply XML attributes here
}
@Override
public Parcelable onSaveInstanceState() {
// Save instance state
Bundle bundle = new Bundle();
bundle.putParcelable("superState", super.onSaveInstanceState());
bundle.putBoolean("visible", visible);
bundle.putBoolean("enabled", enabled);
return bundle;
}
@Override
public void onRestoreInstanceState(Parcelable state) {
// Restore instance state
// This is called after constructor
if (state instanceof Bundle) {
Bundle bundle = (Bundle) state;
visible = bundle.getBoolean("visible");
enabled = bundle.getBoolean("enabled");
state = bundle.getParcelable("superState");
}
super.onRestoreInstanceState(state);
}
}
सुंदर सरल। मेरा कस्टम व्यू एक्सएमएल से गुण पढ़ता है और उन्हें लागू करता है। इन विशेषताओं को कॉन्फ़िगरेशन परिवर्तनों पर सहेजा और बहाल किया जाता है।
लेकिन अगर मैं दो अलग झुकाव के लिए दो अलग अलग लेआउट, उदाहरण के लिए:
[layout-port/view.xml]
<CustomView
custom:visible="true"
custom:enabled="true"
[layout-land/view.xml]
<CustomView
custom:visible="false"
custom:enabled="false"
मेरे समस्या यह है कि जब डिवाइस अभिविन्यास बदले, देखने राज्य दिखाई के रूप में सहेजा और सक्षम किया गया है, लेकिन अब एक्सएमएल लेआउट राज्यों है दृश्य या तो नहीं होना चाहिए। संरक्षक कोस्टोर इंस्टेंसस्टेट से पहले बुलाया जाता है और एक्सएमएल गुण सहेजे गए राज्य द्वारा ओवरराइट हो रहे हैं। मुझे यह नहीं चाहिए, एक्सएमएल को सहेजे गए राज्य पर प्राथमिकता है।
मैं कुछ गलत कर रहा हूँ? इसे हल करने का सबसे अच्छा तरीका क्या होगा?
दुकान एक्सएमएल मूल्यों और बहाली के बाद उन्हें पुन: लागू। आप बहाली को भी लागू नहीं कर सकते हैं, इसलिए मान हमेशा xml – nandsito
@nandsito में परिभाषित किए जाएंगे, शायद यह है कि मैं क्या कर रहा हूं। मैंने सोचा कि शायद ऐसा करने का एक और सीधा तरीका है, एक्सएमएल पार्स करने के बाद राज्य को बहाल करने का एक तरीका। मैंने सोचा कि मैं कर सकता हूं कि एट्रिब्यूटसेट को एक चर में सहेजना है, फिर RestoreInstanteState के अंत में XML को पार्स करें। लेकिन जब रीस्टोर इंस्टेंटस्टेट को पहली बार बनाया गया है तो कॉल नहीं किया जाता है। –
एंड्रॉइड एक्सएमएल पार्स करता है और दृश्य कन्स्ट्रक्टर में इसके गुणों को लागू करता है, इसलिए एक्सएमएल हमेशा पुनर्स्थापित स्थिति से पहले संसाधित होता है। अगर आप इस ऑर्डर को बदलना चाहते हैं, तो आपको वैरिएबल वैल्यू मैन्युअल रूप से सेट करना होगा – nandsito