2014-07-10 9 views
5

LayoutManagerLinearLayoutManager के मानक कार्यान्वयन के साथ संयोजन में नए RecyclerView को आजमा रहा है। मेरा लक्ष्य LayoutManager डिवाइस को पोर्ट्रेट अभिविन्यास में होने पर क्षैतिज रूप से खींचने देना है और डिवाइस परिदृश्य में होने पर उन्हें लंबवत रूप से आकर्षित करना है। इस के लिए मैं में निम्नलिखित कोड का उपयोग मेरी गतिविधि के onCreate:लाइनरलाइट मैनेजर सेट फोन रोटेशन के बाद ऑरेंटेशन

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.nextColors); 
recyclerView.setAdapter(myAdapter = new MyAdapter(getBaseContext(), myData, myLayout); 
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); 
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
    linearLayoutManager.setOrientation(LinearLayout.HORIZONTAL); 
} else { 
    linearLayoutManager.setOrientation(LinearLayout.VERTICAL); 
} 
recyclerView.setLayoutManager(linearLayoutManager); 
recyclerView.setItemAnimator(new DefaultItemAnimator()); 

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

किसी को भी एक विचार के साथ डिवाइस अभिविन्यास परिवर्तन setOrientation काम करने के लिए कैसे है?

+0

आप अपने समस्या का निदान करने में सक्षम होने के लिए पर्याप्त कोड प्रदर्शित नहीं किया। अपना लेआउट बनाने के लिए उपयोग किए जाने वाले कोड को दिखाएं। – Squonk

+0

आपका क्या मतलब है? रीसाइक्लिंग व्यू का समर्थन करने वाला एडाप्टर? – Joris

+0

@Squonk मैंने रीसाइक्लिंगव्यू और इसके एडाप्टर के बारे में अधिक कोड जोड़ा है। – Joris

उत्तर

4

इसका कारण यह है कि आप उन्मुखीकरण सेट कर रहे हैं इससे पहले कि बचाया राज्य RecyclerView में पुनर्स्थापित किया जाता है हो रहा है।

Activity#onPostCreate या Activity#onResume पर अन्य ओरिएंटेशन सेट करने का प्रयास करें (दूसरे शब्दों में, सहेजे गए राज्य को पुनर्स्थापित करने के बाद) ताकि सहेजा गया राज्य आपके अभिविन्यास मान को ओवरराइड नहीं करेगा।

अद्यतन संस्करण 21 के रूप में, एलएलएम विन्यास बदलाव पर उन्मुखीकरण को सुरक्षित नहीं करेगा तो अपने कोड के रूप में है काम करना चाहिए। आपको सहेजे गए राज्य की परवाह करने की आवश्यकता नहीं है।

यह परिवर्तन क्योंकि बचाया राज्य चर राज्य को बचाने के लिए जिम्मेदार होना चाहिए जबकि उन्मुखीकरण एक विन्यास जो हम डेवलपर हर बार बनाई गई है स्थापित करने के लिए उम्मीद कर सकते हैं है किया जाता है।

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