दिलचस्प पोस्ट
जावा कीस्टोर में निजी-कुंजी / सार्वजनिक-प्रमाणपत्र जोड़ी आयात करना क्लिक पर इनपुट पाठ का डिफ़ॉल्ट मान हटाएं आईओएस एप सबमिशन: 64-बिट समर्थन लापता MySQL के लिए SQLite3 को स्थानांतरित करने का त्वरित आसान तरीका है? गो प्रोजेक्ट लेआउट का एक समझदार तरीका क्या है कैसे जीडीबी में किसी दिए गए पते पर विधानसभा निर्देश को तोड़ने के लिए? सी संरचना सरणी प्रारंभ करना मैं नोड। जेएस में मूल वादे के साथ विश्वव्यापी अपवादों को कैसे प्रबंधित करता हूं? वास्तव में किसी भी कंप्यूटर को विशिष्ट रूप से पहचानने का कोई तरीका क्या है? एडीटी अपडेट के बाद ClassNotFound अपवाद UITableViewCell की पृष्ठभूमि का रंग कैसे अनुकूलित करें? सी # के समान जावास्क्रिप्ट में फ़ॉर्मेट संख्याएं मैं 1 सेकंड के लिए विधि कॉल कैसे दे सकता हूं? कोर डेटा प्राथमिक कुंजी एंड्रॉइड स्टूडियो: ड्रायबल फ़ोल्डर: एकाधिक डीपीआई के लिए छवियाँ कैसे डालें?

Android में ListView में पंक्ति को कैसे उजागर करें?

मुझे ListView में एक पंक्ति को उजागर करने की आवश्यकता है (जो उसने चुना है उपयोगकर्ता को दिखाने के लिए), इसलिए, वह ऐसा नहीं है जिसे चुना जाना है, यह वह है जिसने पहले चुना था।

मेरे पास पहले से स्थान है:

 ListView.setSelection(position); 

और अब जो मैं चाहता हूँ वह इस विशिष्ट पंक्ति का चयन करना है और इसे उजागर करना है

उस गतिविधि में onCreate() का कोड जिसमें ListView शामिल है:

 public class CountryView extends Activity { protected static final String LOG_TAG = null; /** Called when the activity is first created. */ String[] lv_arr = {}; ListAdapter adapter; TextView t; private ListView lvUsers; private ArrayList<Coun> mListUsers; String responce=null; public int d; int selectedListItem = -1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.country); Intent data =getIntent(); mListUsers = getCoun(); lvUsers = (ListView) findViewById(R.id.counlistView); lvUsers.setAdapter(new ListAdapter(this, R.id.counlistView, mListUsers)); selectedListItem=data.getExtras().getInt("PositionInList"); lvUsers.setChoiceMode(ListView.CHOICE_MODE_SINGLE); lvUsers.setOnItemClickListener(new OnItemClickListener() { int positionItem; public void onItemClick(AdapterView<?> parent, View view,int position, long id) { Intent pongIntent = new Intent(getApplicationContext(),Trav.class); int counId=mListUsers.get(position).id; pongIntent.putExtra("response",mListUsers.get(position).p); pongIntent.putExtra("responseCounID",counId); //Put the position of the choose list inside extra positionItem=position; pongIntent.putExtra("PositionInListSet",positionItem); setResult(Activity.RESULT_OK,pongIntent); Log.i("CounID *******************************"," "+counId); finish(); } }); } } 

वेब के समाधान से एकत्रित समाधान "Android में ListView में पंक्ति को कैसे उजागर करें?"

चूंकि डिफ़ॉल्ट setSelection से NONE एक चयन मोड पर सेट NONE , इसलिए टच मोड में setSelection विधि का विज़ुअल प्रभाव नहीं होगा।

पिछली चयन को रखने के लिए / स्पष्ट रूप से एक स्पष्ट चयन प्रदर्शित करने के लिए, सबसे पहले आपको अपने सूची दृश्य का विकल्प मोड उचित रूप से सेट करना होगा:

 listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

इन विधियों के एपीआई डॉक्स को पढ़ना उपयोगी है:

  • setSelection
 void android.widget.AdapterView.setSelection(int position) 

वर्तमान में चयनित आइटम सेट करता है एक्सेस करने वाले उपवर्गों को समर्थन देने के लिए जो इस विधि को ओवरराइड करते हैं, वे पहले ओवरराइडन सुपर विधि को लागू करना चाहिए।

पैरामीटर :
चयन करने के लिए डेटा आइटम की position सूचकांक (0 से शुरू)।

  • setChoiceMode
 void android.widget.ListView.setChoiceMode(int choiceMode) 

सूची के लिए चुनाव व्यवहार को परिभाषित करता है डिफ़ॉल्ट रूप से, सूचियों में कोई भी विकल्प नहीं है ( CHOICE_MODE_NONE ) CHOICE_MODE_SINGLE को पसंदमोड को सेट करके, सूची में एक आइटम को चुने हुए राज्य में रखने की अनुमति मिलती है CHOICE_MODE_MULTIPLE के लिए पसंदमॉड ​​को सेट करके, सूची में किसी भी संख्या में आइटम को चुना जा सकता है।

पैरामीटर :
choiceMode CHOICE_MODE_NONE , CHOICE_MODE_SINGLE , या CHOICE_MODE_MULTIPLE

यदि यह पर्याप्त नहीं है (यदि आप हमेशा वर्तमान चयन के बगल में अंतिम चयन को दिखाना चाहते हैं), तो आपको अपना अंतिम चयनित आइटम (जो कि सूची ListAdapter को ListAdapter ) को अंतिम रूप से चयनित किया जाना चाहिए, और आपके एडाप्टर के getView विधि में रेंडरर के लिए एक अलग पृष्ठभूमि संसाधन अगर यह इस lastSelectedItem बराबर है lastSelectedItem

यदि आपका अंतिम चयन चयन परिवर्तन पर ताज़ा नहीं करेगा, तो आपको स्पष्ट रूप से अपने एडैप्टर इंस्टेंस पर notifyDataSetChanged विधि को कॉल करना चाहिए।

अद्यतन करें
चूंकि आपकी ListView में setResult(Activity.RESULT_OK,pongIntent); एक ऐसी गतिविधि का बच्चा है जो इस परिणाम के लिए इंतजार करता है ( setResult(Activity.RESULT_OK,pongIntent); भाग के आधार पर), आरंभिक विचार सही है, आखिरी स्थिति को तब आशय के माध्यम से पारित किया जाना चाहिए जब गतिविधि शुरू करना:

 selectedListItem = getIntent().getIntExtra("PositionInList", -1); lvUsers.setChoiceMode(ListView.CHOICE_MODE_SINGLE); lvUsers.setSelection(selectedListItem); 

ListView.CHOICE_MODE_SINGLE समाधान यदि आप एक ही गतिविधि में रहते हैं, लेकिन आप इसे प्रत्येक आइटम पर क्लिक कर रहे हैं क्लिक करें (चयन परिवर्तन), यही कारण है कि अतिरिक्त डेटा प्रारंभिक Intent को पारित किया जाना चाहिए।

आप अपने एडेप्टर से पहले चयनित आइटम की पृष्ठभूमि को भी सेट अप कर सकते हैं-उपरोक्त उल्लिखित, इसकी getView विधि को ओवरराइड करते getView :

 lvUsers.setAdapter(new ArrayAdapter(this, R.id.counlistView, groups) { @Override public View getView(int position, View convertView, ViewGroup parent) { final View renderer = super.getView(position, convertView, parent); if (position == selectedListItem) { //TODO: set the proper selection color here: renderer.setBackgroundResource(android.R.color.darker_gray); } return renderer; } }); 

बस:

  1. अपनी सूची दृश्य में सही चुनाव मोड सेट करें setChoiceMode
  2. आइटम लेआउट में चयन स्थिति का समर्थन करने के लिए पृष्ठभूमि सेट करें, जैसे:

     android:background="?android:attr/activatedBackgroundIndicator" 

जानकारी के लिए:

यह आपके लेआउट फ़ाइलों में कार्यान्वित करना आसान है और एंड्रॉइड को बाकी का संचालन करने दें …

1) सुनिश्चित करें कि आपके पास android:choiceMode="" अपने ListView लेआउट पर सेट करें ( singleChoice , singleChoice , आदि)। डिफ़ॉल्ट रूप से यह none को none सेट किया जाता है

 <ListView android:id="@+id/invite_friends_fragment_contacts_list" android:layout_width="match_parent" android:layout_height="wrap_content" android:choiceMode="multipleChoice"/> <!-- THIS LINE --> 

2) एक राज्य चयनकर्ता एक्सएमएल फ़ाइल बनाएँ और इसे अपने डिज़ाइन फ़ोल्डर में सहेजें। इस उदाहरण में, हम इसे state_selector.xml नाम देंगे:

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

3) आपकी सूची आइटम लेआउट में , पृष्ठभूमि के रूप में राज्य_सैल्टोर.एक्सएमएम फ़ाइल जोड़ें:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/state_selector"> <!-- THIS LINE --> <!-- ALL OF YOUR ELEMENTS WILL GO HERE (TextViews, ImageViews, etc) --> </RelativeLayout> 

यदि आप multipleChoice onItemClick() का उपयोग कर रहे हैं, तो आप onItemClick() ओवरराइड कर सकते हैं और तदनुसार चयनित आइटम सेट / अनसेट कर सकते हैं। एंड्रॉइड आपके राज्य_सैल्टोर.एक्सएम फाइल में निर्दिष्ट पृष्ठभूमि रंग बदल जाएगा।

मुझे इसके लिए एक आसान समाधान खोजने में एक समस्या थी क्योंकि बहुत सारे ट्यूटोरियल और उत्तर में रेडियो बटन के माध्यम से एकल चयन के बारे में जानकारी होती है (जो कि रेडियो समूह की भारी पर निर्भर थी)।

मेरी समस्या यह थी कि मैं आइटम को "हाइलाइटेड" स्थिति में सेट कर सकता था, लेकिन तब वह सूची रीसेट नहीं कर सके जब अगले आइटम का चयन किया गया था। यहां वह है जो मैंने जुटाया:

 listView.setOnItemClickListener(new ItemHighlighterListener ()); 

इस वर्ग के साथ:

 private class ItemHighlighterListener implements OnItemClickListener{ private View lastSelectedView = null; public void clearSelection() { if(lastSelectedView != null) lastSelectedView.setBackgroundColor(android.R.color.transparent); } @Override public void onItemClick(AdapterView<?> arg0, View view, int arg2, long arg3) { clearSelection(); lastSelectedView = view; view.setBackgroundDrawable(view.getContext().getResources().getDrawable(R.drawable.shape_selected_menu_item)); } } 

मैं इस समस्या को निम्न तरीके से हल करता हूं: 1. एक अंतिम क्लाइंट आईडी सेट करें, जब सूची में आइटम पर क्लिक करें, स्थिति को पॉइंट मूव के लिए अंतिम क्लिक करें, फिर दृश्य की पृष्ठभूमि को अपडेट करें। इसके बाद, जब हम एक आइटम पर क्लिक करते हैं, तो यह आइटम हाइलाइट किया जाएगा, लेकिन जब हम सूची को स्क्रॉल करते हैं (जो आइटम को हमने स्क्रीन से चुना है) और वापस स्क्रॉल करें, तो हाइलाइट निकल चुका है, क्योंकि विधि getView () में फिर से चला आपका एडाप्टर, इसलिए, हमें अगली चीज़ करना है 2. अपने एडाप्टर में, विधि getView () में पृष्ठभूमि को बदलें, यहां कोड है:

 private static int lastClickId = -1; private OnItemClickListener listener = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if ((lastClickId != -1) && (lastClickId != position)) { parent.getChildAt(lastClickId).setBackgroundResource( R.color.grey); view.setBackgroundResource(R.color.blue); } if (lastClickId == -1) { view.setBackgroundResource(R.color.blue); } lastClickId = position; } }; public static int getCurrentSelectedItemId() { return lastClickId; } 

एडाप्टर:

 public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View view = mInflater.inflate(R.layout.tweet_list_layout, null); // set selected item's background to blue if (position == MainUserFeedFragment.getCurrentSelectedItemId()) { view.setBackgroundResource(R.color.blue); } } 

आप एक सरणी में चयन क्यों नहीं myArrayAdapter(context,layoutID,dataArray,selectionArray) , तो उस myArrayAdapter(context,layoutID,dataArray,selectionArray) सरणी एडाप्टर के निर्माता में, myArrayAdapter(context,layoutID,dataArray,selectionArray) एडाप्टर myArrayAdapter(context,layoutID,dataArray,selectionArray)

तो अपने getView विधि में arrayadapter के लिए, बस एक जांच करें उदाहरण के लिए स्यूडोकोड में

 if row was previously selected change background color 

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

  if(position == 0){ viewHolderThubnail.relImage.setBackgroundResource(R.drawable.translate); TransitionDrawable transition = (TransitionDrawable) viewHolderThubnail.relImage.getBackground(); transition.startTransition(1000); }else{ viewHolderThubnail.relImage.setBackgroundResource(R.color.white); } 

translate.xml

 <?xml version="1.0" encoding="UTF-8"?> <transition xmlns:android="http://schemas.android.com/apk/res/android"> <!-- The drawables used here can be solid colors, gradients, shapes, images, etc. --> <item android:drawable="@drawable/new_state" /> <item android:drawable="@drawable/original_state" /> </transition> 

new_state.xml

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#92BCE7"/> </shape> 

original_state.xml

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#FFFFFF"/> </shape> 

यदि आप इस कोड को समझते हैं, जो बहुत आसान है, तो मुझे कहना चाहिए, फिर शून्य की स्थिति में सूची दृश्य वस्तु 5 सेकंड के लिए नीले रंग में उजागर करेगी और फिर यह सफेद रंग से फीका धीमा हो जाएगी।

सभी को बस से बाहर

देखे गए दृश्य = नल;

  @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //these two lines of code means that only one item can be selected at a time if(updatedview != null) updatedview.setBackgroundColor(Color.TRANSPARENT); updatedview=view; Toast.makeText(getApplicationContext(), " " + str[position], Toast.LENGTH_LONG).show(); view.setBackgroundColor(Color.CYAN); }