Khotmanish,
मैं सबसे कारगर द्वारा यकीन है कि तुम क्या मतलब है नहीं कर रहा हूँ मार्ग। ऐसे कई तरीके हैं जो बहुत तेज़ होते हैं, लेकिन यह अक्सर उस समय पर निर्भर करता है जो आप समय से पहले जानते हैं और आप क्या नहीं करते हैं।यह भी समझा जाना चाहिए कि गतिशील दृश्य गुणों को बहुत गलत समझा जाता है, लेकिन लोकप्रिय मिथकों के बावजूद अत्यधिक कुशल है। Google के लोगों ने यूआई विकास पर एक अद्भुत काम किया।
यदि आप इसे समय से पहले जानते हैं, तो आप बस प्रत्येक दृश्य के लिए एक स्टेटलिस्ट ड्रावेबल बना सकते हैं और इसे अपने एडाप्टर के माध्यम से चलाने के लिए प्रत्येक पर लागू कर सकते हैं।
अपने StateListDrawable बनाने के लिए, एक बना:
StateListDrawable _drawStates;
फिर, प्रत्येक राज्य के लिए, आप की जरूरत drawable जोड़ें:
_drawStates.add(new int[] {android.R.attr.state_pressed}, _newImage);
यह आपके getView में निम्न पंक्ति के रूप में सरल है () आपके एडाप्टर के लिए विधि:
v.setBackgroundDrawable(_drawStates);
वैकल्पिक रूप से, आप पृष्ठभूमि को गतिशील रूप से बदल सकते हैं चयन के अनुसार। यह OnListItemClick()
में किया जा सकता है। आप देखते हैं, OnListItemClick()
आपको सटीक दृश्य देगा जो क्लिक किया गया है। एक बार आपके पास यह हो जाने के बाद, आप बच्चे को id
से ढूंढ सकते हैं और इसकी गुणों को बदल सकते हैं और invalidate()
इसे बदल सकते हैं। मैं इस चाल का बहुत उपयोग करता हूं। मुझे बहुत मेमोरी बचाता है, लेकिन मैं वास्तव में प्रोसेसर गहन कुछ भी नहीं कर रहा हूं। आप लगभग किसी भी प्रसंस्करण के बिना लगभग किसी भी संपत्ति को बदल सकते हैं। यहां एक उदाहरण दिया गया है:
@Override protected void onListItemClick(final ListView inList, final View v, final int atPos, final long rowID)
{//Get the Child, set the properties
ImageView _img = (ImageView)(v.findViewById(R.id.app_package));
_img.setBackgroundColor(myClickedColor);
_img.invalidate(); // <---- BEST Option
// ... OR ...
v.invalidate(); // <---- 2nd Best Option
// ... OR ...
inList.invalidate(); // <---- Last resort or specialized implementation
}
यह ध्यान रखना महत्वपूर्ण है कि पृष्ठभूमि रंगों की बात करते समय यह गतिशील रूप से कुछ चेतावनियां होती हैं। आपको बच्चे को क्लिक किए गए दृश्य से प्राप्त करना होगा ... सूची दृश्य नहीं। दूसरा, पृष्ठभूमि रंग बदलते समय, आप वास्तव में पृष्ठभूमि आरेखण बदल रहे हैं। इसका मतलब यह है कि अन्य सभी "राज्यव्यापी" गुण दूर हो जाते हैं और आपको इसे मैन्युअल रूप से बदलना होगा (यदि आप इसे शुरू करना चाहते हैं)।
अब, एक अधिक लोकप्रिय, लेकिन कुछ कम लचीला दृष्टिकोण एक्सएमएल में आपके स्टेटलिस्ट को हटाने योग्य है। एंड्रॉइड डेवलपर वेबसाइट पर इसे कैसे करना है, यह जानने के लिए कई संसाधन हैं।
आशा इस मदद करता है, FuzzicalLogic
"AFAIK हम चयनकर्ता में शैलियों को लागू नहीं कर सकते हैं। क्या जावा कोड में संभालने के बजाय इस पर काम करने का कोई बेहतर तरीका है?" यदि आप इसे किसी चयनकर्ता में नहीं कर सकते हैं तो यह और कैसे किया जा सकता है लेकिन जावा में? हो सकता है कि आप डिफ़ॉल्ट चयनकर्ता द्वारा निर्दिष्ट शैली विशेषताओं को ओवरराइड कर सकें? – nmr
पृष्ठभूमि रंग/खींचने योग्य बदलने के लिए शैलियों को लागू किया जा सकता है। यह फ़ॉन्ट आकार बदलने में मदद नहीं करेगा। क्या मुझे प्रत्येक बच्चे के विचारों के लिए चयनकर्ता निर्दिष्ट करने की आवश्यकता है? जावा कोड में, getView() के अंदर। –