दिलचस्प पोस्ट
नेंट या एमएसबीइल्ड, जो एक को चुनने के लिए और कब? __doPostBack का उपयोग कैसे करें () सी # में एक सामान्य पद्धति से मैं NULL कैसे वापस कर सकता हूँ? स्ट्रिंग मान का उपयोग करके एक चर नाम बनाना JQuery के साथ डाउनलोड लिंक के पीछे फ़ाइल का आकार ढूंढें AFNetworking पोस्ट अनुरोध Gmail और Google Chrome 12+ में क्लिपबोर्ड कार्यक्षमता से पेस्ट छवि कैसे काम करती है? मैं एक नई कुंजी बनाने के बिना कैसे SSH कुंजी के लिए पासफ़्रेज़ को निकाल सकता हूं? JQuery से एक वेब सेवा को कैसे कॉल करें सीमेक बूस्ट नहीं मिल रहा है सबप्लॉट कैसे काम करता है और MATLAB में सबप्लॉट (121) और सबप्लॉट (1,2,1) के बीच अंतर क्या होता है? रीडायरेक्ट और नेविगेशन / अग्रेषित और क्या इस्तेमाल करने के दौरान क्या अंतर है? ओवरराइडिंग! महत्वपूर्ण शैली सीएमडी / सी क्या मतलब है? जावास्क्रिप्ट विंडो का आकार बदलना घटना

किसी ListView पर चयनित आइटम का पृष्ठभूमि का रंग बदलें

मैं जानना चाहता हूं कि कैसे मैं अपने listView पर चयनित आइटम के पृष्ठभूमि का रंग बदल सकता हूँ। मैं केवल उपयोगकर्ता द्वारा क्लिक किए गए विशिष्ट आइटम को बदलना चाहता हूं, जिसका अर्थ है कि उपयोगकर्ता एक अन्य आइटम पर क्लिक करता है तो यह वह हाइलाइट हो जाएगा। अच्छी तरह से जब से मैं यह संभव के रूप में सरल रखने के लिए और डिफ़ॉल्ट एंड्रॉइड listview मैं इसके बजाय इस कोड का इस्तेमाल करना चाहते हैं:

record_list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { try{ for (int ctr=0;ctr<=record_items.length;ctr++){ if(i==ctr){ record_list.getChildAt(ctr).setBackgroundColor(Color.CYAN); }else{ record_list.getChildAt(ctr).setBackgroundColor(Color.WHITE); } } } catch (Exception e){ e.printStackTrace(); } Log.v("Selected item",record_list.getItemAtPosition(i)); } }); 

ठीक है यह एक काम कर रहा है लेकिन समस्या ये है कि यह धीमी है अब मुझे यह जानना है कि अगर कोई दूसरा तरीका है जो मैं कर सकता हूं, जो मैंने किया था उसी उत्पाद को देगा।

मैंने record_list.getSelectedView().setBackgroundColor(Color.CYAN); का उपयोग करने की कोशिश की record_list.getSelectedView().setBackgroundColor(Color.CYAN); लेकिन यह मुझे एक अशक्त सूचक अपवाद देता है

मैंने भी selector.xml की कोशिश की लेकिन यह भी चाल नहीं किया इसके अलावा, सूची वीव पर एक गुण है जो सूची चयनकर्ता कहलाता है। यह दस्तावेज के अनुसार एक ड्रॉएबल है "सूची में वर्तमान में चयनित आइटम को इंगित करने के लिए उपयोग किए जाने योग्य"। मुझे यह भी मानना ​​है कि यह चाल करना चाहिए और हाँ यह मेरे एमुलेटर पर चाल नहीं बल्कि मेरे आकाशगंगा टैब पर है मैंने भी अन्य तरीकों की कोशिश की लेकिन कुछ भी काम नहीं करता जैसा मैं चाहता था

वेब के समाधान से एकत्रित समाधान "किसी ListView पर चयनित आइटम का पृष्ठभूमि का रंग बदलें"

आप वर्तमान चयनित तत्व की स्थिति को ट्रैक कर सकते हैं:

  OnItemClickListener listViewOnItemClick = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) { mSelectedItem = position; mAdapter.notifyDataSetChanged(); } }; 

और अपने एडाप्टर की getView विधि को ओवरराइड करें:

  @Override public View getView(int position, View convertView, ViewGroup parent) { final View view = View.inflate(context, R.layout.item_list, null); if (position == mSelectedItem) { // set your color } return view; } 

मेरे लिए यह चाल थी

आप एक चयनकर्ता का उपयोग कर सकते हैं रंग मानों को बदलें और अपनी आवश्यकताओं के अनुसार नीचे संशोधित करें।

ड्रॉबल फ़ोल्डर में bkg.xml

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/pressed" /> <item android:state_focused="false" android:drawable="@drawable/normal" /> </selector> 

ड्रॉएबल फ़ोल्डर में दबाया। xml

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#FF1A47"/> // color <stroke android:width="3dp" android:color="#0FECFF"/> // border <padding android:left="5dp" android:top="5dp" android:right="5dp" android:bottom="5dp"/> <corners android:bottomRightRadius="7dp" // for rounded corners android:bottomLeftRadius="7dp" android:topLeftRadius="7dp" android:topRightRadius="7dp"/> </shape> 

ड्रॉएबल फ़ोल्डर में सामान्य। xml

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#FFFFFF"/> <stroke android:width="3dp" android:color="#0FECFF" /> <padding android:left="5dp" android:top="5dp" android:right="5dp" android:bottom="5dp"/> <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp" android:topLeftRadius="7dp" android:topRightRadius="7dp"/> </shape> 

प्रत्येक पंक्ति के लिए फुलाया जाने के लिए कस्टम लेआउट को देखने के लिए पृष्ठभूमि को तैयार करने के लिए सेट करें

कस्टम ऐडाप्टर के साथ कस्टम सूचीदृश्य का उपयोग करने की सलाह देते हैं I

  android:background="@drawable/bkg" 

यदि आपने एक कस्टम एडॉप्टर का उपयोग नहीं किया है तो आप सूचीइलेक्टर को नीचे के रूप में देखने के लिए सेट कर सकते हैं

  android:listSelector="@drawable/bkg" 

चर परिभाषित करें

 private ListView mListView; 

चर आरंभ करें

 mListView = (ListView)findViewById(R.id.list_view); 

सूचीइवन के ऑन आईटेमक्लिकलिस्ट

  mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adpterView, View view, int position, long id) { for (int i = 0; i < mListView.getChildCount(); i++) { if(position == i ){ mListView.getChildAt(i).setBackgroundColor(Color.BLUE); }else{ mListView.getChildAt(i).setBackgroundColor(Color.TRANSPARENT); } } } }); 

परियोजना का निर्माण और चलाएं – हो गया

अगर आप इसे क्लिक करने के बाद आइटम को हाइलाइट करना चाहते हैं, तो आपको इसे मैन्युअल रूप से ऑन आईटमक्लिक श्रोता

Android सूचीदृश्य चयनित आइटम रह गए हैं :

 myList.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { view.setSelected(true); // <== Will cause the highlight to remain //... do more stuff }}); 

यह मानता है कि आपके चयनकर्ता में आपके पास एक state_selected आइटम है:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:state_pressed="true" android:drawable="@color/red" /> <item android:state_enabled="true" android:state_focused="true" android:drawable="@color/red" /> <item android:state_enabled="true" android:state_selected="true" android:drawable="@color/red" /> <item android:drawable="@color/white" /> </selector> 

सबसे पहले आप चयनकर्ता एक्सएमएल फ़ाइल को अपने ड्रॉएबल फोल्डर drawable/list_item_selector.xml में नीचे की तरह बना सकते हैं।

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_activated="true"> <shape android:shape="rectangle"> <solid android:color="#333333" /> <padding android:left="5dp" android:right="5dp" /> </shape></item> <item><shape android:shape="rectangle"> <solid android:color="#222222" /> </shape></item> </selector> 

और फिर आपकी सूचीदृश्य में पृष्ठभूमि को निर्दिष्ट करें

 android:background="@drawable/list_item_selector" 

विधि 1:

अपने xml लेआउट गतिविधि / टुकड़ा में सूची दृश्य अपडेट करें:

 <ListView ... android:choiceMode="singleChoice" android:listSelector="@android:color/darker_gray" /> 

यही है, आप कर चुके हैं!

यदि आप इसे संभाल करने के लिए प्रोग्रामेटिक तरीके चाहते हैं तो विधि 2 का उपयोग करें …

विधि 2:

यदि आप एक ListFragment का उपयोग कर रहे हैं तो आप रंग सेट करने के लिए दृश्य का उपयोग करके ListItemClick () पर ओवरराइड कर सकते हैं। अंतिम चयन का रंग रीसेट करने के लिए चयनित वर्तमान दृश्य को बचाएं।

कृपया ध्यान दें, यह केवल एक स्क्रीन पर फिट होने वाली सूची दृश्य पर काम करता है, क्योंकि दृश्य पुनर्नवीनीकरण है।

 public class MyListFragment extends ListFragment { View previousSelectedItem; ... @Override public void onListItemClick(ListView parent, View v, int position, long id) { super.onListItemClick(parent, v, position, id); if (previousSelectedItem!=null) { previousSelectedItem.setBackgroundColor(Color.WHITE); } previousSelectedItem=v; v.setBackgroundColor(Color.BLUE); } } 

नीचे दिए गए XML को लिस्टिटम पृष्ठभूमि के रूप में उपयोग करें, इससे सभी समस्याओं का समाधान होगा। चयनित होने पर हाइलाइट किया जाएगा, हालांकि आप नीचे स्क्रॉल करते हैं।

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@android:color/holo_orange_dark" android:state_pressed="true"/> <item android:drawable="@android:color/holo_green_light" android:state_selected="true"/> <item android:drawable="@android:color/holo_green_light" android:state_activated="true"/> 

धन्यवाद, नागेंद्र

मैं भी ऐसा ही कर रहा हूं: चयनित सूची आइटम की पृष्ठभूमि को हाइलाइट करें (इसे लाल रंग में बदलें) और आइटम के भीतर सफेद रंग में पाठ रंग सेट करें

मैं एक " सरल लेकिन कुशल नहीं " तरीके से सोच सकता हूं: कस्टम एडॉप्टर में चयनित आइटम की स्थिति को बनाए रखें, और उसे OnItemClickListener की OnItemClickListener कार्यान्वयन में परिवर्तित करें:

 // The OnItemClickListener implementation @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mListViewAdapter.setSelectedItem(position); } // The custom Adapter private int mSelectedPosition = -1; public void setSelectedItem (int itemPosition) { mSelectedPosition = itemPosition; notifyDataSetChanged(); } 

फिर getView() विधि में चयनित आइटम की पृष्ठभूमि और टेक्स्ट रंग को getView()

 // The custom Adapter @Override public View getView(int position, View convertView, ViewGroup parent) { ... if (position == mSelectedPosition) { // customize the selected item's background and sub views convertView.setBackgroundColor(YOUR_HIGHLIGHT_COLOR); textView.setTextColor(TEXT_COLOR); } else { ... } } 

थोड़ी देर के लिए खोज करने के बाद, मैंने पाया कि कई लोगों ने android:listSelector="YOUR_SELECTOR" सेट करने के बारे में बताया है android:listSelector="YOUR_SELECTOR" थोड़ी देर के लिए प्रयास करने के बाद, मुझे सूचीव्यू के लेआउट संसाधन पर सेट किए गए केवल दो पंक्तियों के साथ चयनित सूचीदृश्य आइटम की पृष्ठभूमि को हाइलाइट करने का सबसे आसान तरीका मिला:

 android:choiceMode="singleChoice" android:listSelector="YOUR_COLOR" 

activatedBackgroundIndicator करने वाले activatedBackgroundIndicator थीम को अनुकूलित करने के लिए, यह काम करने का एक अन्य तरीका भी है। लेकिन मुझे लगता है कि यह एक अधिक सामान्य समाधान होगा क्योंकि यह संपूर्ण विषय को प्रभावित करेगा।

मैंने पाया सबसे सरल तरीका:

अपनी गतिविधि में XML इन पंक्तियों को जोड़ता है:

 <ListView ... android:choiceMode="singleChoice" android:listSelector="#666666" /> 

या प्रोग्राम इन गुणों को सेट करें:

 listView.setSelector(Drawable selector) listView.setSelector(int resourceId) 

मेरा विशेष उदाहरण:

  <ListView android:choiceMode="singleChoice" android:listSelector="#666666" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/listView"/> 

एजेजी के लिए धन्यवाद: https://stackoverflow.com/a/25131125/1687010

उन लोगों के लिए, जिन्हें आप नीचे स्क्रॉल करते हुए भी चयनित पंक्तियों को बनाए रखने के लिए क्या करने की ज़रूरत है यह राज्य_अक्षम है बाकी की आंतरिक कार्यक्षमता का ध्यान रखा जाता है, आपको टॉगल के बारे में चिंता करने की आवश्यकता नहीं है, और कई आइटम चुन सकते हैं मुझे सूचित नहीं करने की आवश्यकता नहीं हैसेटसेट चेंजेड () या सेट चयनित (सही) तरीकों

इस लाइन को अपनी चयनकर्ता फाइल में जोड़ें, मेरे लिए ड्रायोबल \ row_background.xml

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@android:color/holo_blue_light"/> <item android:state_enabled="true" android:state_pressed="true" android:drawable="@android:color/holo_blue_light" /> <item android:state_enabled="true" android:state_focused="true" android:drawable="@android:color/holo_blue_bright" /> <item android:state_enabled="true" android:state_selected="true" android:drawable="@android:color/holo_blue_light" /> <item android:state_activated="true" android:drawable="@android:color/holo_blue_light" /> <item android:drawable="@android:color/transparent"/> </selector> 

फिर लेआउट में \ custom_row.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="10dip" android:background="@drawable/row_background" android:orientation="vertical"> <TextView android:id="@+id/line1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 

अधिक जानकारी के लिए, मैं इस सूची लियू एडाप्टर के साथ, myList.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE_MODAL) का उपयोग कर रहा हूं; और myList.setMultiChoiceModeListener (नया MultiChoiceModeListener () …

इस उदाहरण से: http://www.androidbegin.com/tutorial/android-delete-multiple-selected-items-listview-tutorial/

इसके अलावा, आपको (अपनी सूची-एडाप्टर युग्मन के लिए) इस संरचना का उपयोग करना चाहिए: सूची myList = new ArrayList ();

के बजाय: ArrayList myList = नया अर्रेइस्ट ();

स्पष्टीकरण: जावा में प्रकार सूची बनाम अर्रेइलास्ट

मुझे पता है यह एक पुराना सवाल है, लेकिन मैं इस जरूरत के लिए एक सरल समाधान देता हूं (बिना लूप!):

 //On your adapter create a variable: private View lastSelectedItem; //Define the folowing method: private void toggleBackgroundItem(View view) { if (lastSelectedItem != null) { lastSelectedItem.setBackgroundColor(Color.TRANSPARENT); } view.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark)); lastSelectedItem = view; } //finally invoque the method onItemClick lvSac.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick (AdapterView < ? > adapterView, View view,int i, long l){ toggleBackgroundItem(view); } } 

मान लीजिए आप एक आइटम को हर बार क्लिक करना चाहते हैं तो यह कोड अच्छी तरह से काम करता है सूची सूची का नाम सूची के रूप में लेते हैं

 stList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override // here i overide the onitemclick method in onitemclick listener public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //color change //selected item colored for(int i=0; i<stList.getAdapter().getCount();i++) { stList.getChildAt(i).setBackgroundColor(Color.TRANSPARENT); } parent.getChildAt(position).setBackgroundColor(Color.GRAY); }); 

यह एक आसान तरीका है जो चयन को संभाल सकता है, भले ही सूची लंबी है:

 public View getView(final int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub Holder holder=new Holder(); View rowView; rowView = inflater.inflate(R.layout.list_item, null); //Handle your items. //StringHolder.mSelectedItem is a public static variable. if(getItemId(position)==StringHolder.mSelectedItem){ rowView.setBackgroundColor(Color.LTGRAY); }else{ rowView.setBackgroundColor(Color.TRANSPARENT); } return rowView; } 

और फिर अपने ऑनक्लिकलिस्टर में:

 list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { StringHolder.mSelectedItem = catagoryAdapter.getItemId(i-1); catagoryAdapter.notifyDataSetChanged(); ..... 
  View updateview;// above oncreate method listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override `enter code here`public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (updateview != null) updateview.setBackgroundColor(Color.TRANSPARENT); updateview = view; view.setBackgroundColor(Color.CYAN); } }); 

एक सूची दृश्य सेट में:

 android:choiceMode="singleChoice" 

पृष्ठभूमि के लिए एक चयनकर्ता बनाएं (ड्रॉएबल / selector_gray.xml):

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/gray" android:state_checked="true" /> <item android:drawable="@color/white" /> </selector> 

एक सूची के लिए एक आइटम जोड़ें:

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="5dp" android:background="@drawable/selector_gray" android:textColor="@color/colorPrimary" tools:text="Your text" /> 

एक दृश्यहोल्डर में आप इस मद को फुला सकते हैं।