सवाल मल्टी सिलेक्ट लिस्ट व्यू से चयनित आइटम कैसे प्राप्त करें


मैं एक सरणी एडाप्टर का उपयोग कर रहा हूं और इसमें स्ट्रिंग एस की एक सरणी सूची जोड़ रहा है, सूची बहु चयन है, मैं सूची आइटम के मूल्यों को कैसे क्लिक कर सकता हूं?

my_contacts_list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice,conts_list);
  my_contacts_list.setAdapter(adapter);

मैं यह करने की कोशिश कर रहा था,

SparseBooleanArray positions = my_contacts_list.getCheckedItemPositions();
  int size=positions.size();
  int i=0;
  while(i <= size){
   conts_list.get(positions.get(i));
   i++;
  }

लेकिन position.get (i) एक सरणी सूची है, फिर चयनित वस्तुओं को कैसे पुनर्प्राप्त करें?


44
2018-01-04 05:15


मूल


क्या आप MultiAutoCompleteTextView का उपयोग कर रहे हैं? - GSree
@preethi इस उत्तर को देखें, यह मदद कर सकता है: stackoverflow.com/a/20171191/919216 - Chanakya Vadla


जवाब:


SparseBooleanArray.get एक बुलियन लौटाता है, लेकिन मेरा मानना ​​है कि आपको अपनी सूची में प्रत्येक स्थिति के लिए इसे जांचना होगा, उदा।

int len = listView.getCount();
SparseBooleanArray checked = listView.getCheckedItemPositions();
for (int i = 0; i < len; i++)
 if (checked.get(i)) {
  String item = cont_list.get(i);
  /* do whatever you want with the checked item */
 }

43
2018-01-04 05:25



टीआईएस जवाब गलत है, क्या आपने कोशिश की है? या यह मेरे लिए सिर्फ गलत है?, मेरे मामले में मुझे केवल 12 परिणाम मिले, पहले सात सत्य थे और शेष झूठे, मेरी बहु चयन सूची में कुल आइटम 42 थे, स्पैस बूलियन की कुंजी मेरी सूची को इंगित करती है इंडेक्स, कृपया अपना उत्तर सुधारें क्योंकि इसे सही उत्तर के रूप में चिह्नित किया गया है, मैं किसी के लिए असफल होने के लिए नफरत करता हूं क्योंकि उन्होंने गलत जवाब दिया है, प्रवाह को साफ करने के लिए ढेर रखें;) - Shereef Marzouk
मेरे लिए काम नहीं करता है। रोजर केय का जवाब है। - ctekk
मुझे लगता है कि इस उदाहरण में किकर यह जान रहा है कि cont_list आपकी मूल सूची एडाप्टर को खिलाया गया है। यह देखते हुए, मुझे यकीन नहीं है कि आप इसे कैसे काम नहीं कर सकते हैं। check.get (i), केवल तभी वापस आ जाएगा, अगर इंडेक्स, मुझे एडाप्टर के लिए पैरा के रूप में पारित मूल सूची आइटम में चेक किया गया है। - Todd Painton
संक्षिप्त और उपयोगी उत्तर, धन्यवाद। - Ronak Mehta
यह मेरे लिए काम करता है। महान और धन्यवाद - Jack


यह एपीआई एक गड़बड़ है। यहां मेरे लिए क्या काम करता है।

SparseBooleanArray checked = tags.getCheckedItemPositions();
for (int i = 0; i < checked.size(); i++) {
    if(checked.valueAt(i)) {
        Tag tag = (Tag) tags.getItemAtPosition(checked.keyAt(i));
        Log.i("xxxx", i + " " + tag);
    }
}

43
2017-12-22 02:15



यह मेरे लिए काम नहीं करता है। इसके बजाय डैरेन का समाधान मेरे लिए काम करता है। - Cheok Yan Cheng
क्लिक आइटम दृश्य तत्व पर आइटम का चयन कैसे करें, लेकिन सभी आइटम नहीं? सॉलिड एक्सप्लोरर की तरह - DavyJonesUA
मेरे लिए, check.size () हमेशा 0 देता है और मान पहले 12 पर पहुंचते हैं लेकिन सही कुंजी / मान जोड़े के साथ दिखाई देते हैं। इसलिए जब मैं इंडेक्सऑटऑफबॉउड्स अपवाद का सामना करता हूं तो पुनरावृत्ति की सीमा प्राप्त करने के लिए मैं सूची दृश्य के getCount का उपयोग करता हूं और समाप्त करता हूं। नरक के रूप में बदसूरत लेकिन अब तक यह काम करता है। - sfratini
सूची में चेक किए गए आइटमों का सेट देता है। नतीजा केवल तभी मान्य होता है जब विकल्प मोड CHOICE_MODE_NONE पर सेट नहीं किया गया हो। - Jijo Thomas
क्या एक अस्पष्ट जवाब है। मुझे गलत मत समझो। मेरा मतलब भाषा वाक्यविन्यास है। - Ali.Rashidi


मुझे विश्वास है कि इससे जानकारी प्राप्त करने का सबसे तेज़ तरीका है SparseArray चाबियों पर फिर से शुरू करना है (वास्तव में मुझे काफी यकीन है कि उपरोक्त समाधान सभी मामलों में काम नहीं करेंगे)। ListView एक जोड़ी (इंडेक्स, सच) में प्रवेश करेगा SparseBooleanArray प्रत्येक चयनित सूचकांक के लिए।

तो कोड इस तरह दिखेगा:

SparseBooleanArray checked = lv.getCheckedItemPositions();
int size = checked.size(); // number of name-value pairs in the array
for (int i = 0; i < size; i++) {
    int key = checked.keyAt(i);
    boolean value = checked.get(key);
    if (value)
        doSomethingWithSelectedIndex(key);
}

17
2017-09-13 12:36



मेरे लिये कार्य करता है। कोड का यह तरीका बाकी के बाकी हिस्सों की तुलना में काफी पठनीय है। - Cheok Yan Cheng
मेरे लिए भी काम करता है। और भी बहुत समझने योग्य कोड - Ahmed Aeon Axan
यह एक सही जवाब है - thoitbk


मुझे लगता है कि डैरेन रॉबिन्स का जवाब गलत है, मेरा जवाब यहां है:

ArrayList<String> ids = extras.getStringArrayList("commonids");
SparseBooleanArray checked = lv.getCheckedItemPositions();
for (int i = 0; i < checked.size(); i++) {
    if(checked.get(i))
        Log.i("CheckedItem", ids.get(checked.indexOfKey(i)));
}

मान लें कि आईडी एक सूची सूची के समान आकार वाली सूची है जिसमें सूची दृश्य में आइटम के आईडी शामिल हैं


4
2017-12-04 11:00





बात यह है कि आपको सभी सूची दृश्य आइटमों को फिर से शुरू करना होगा, लेकिन चेक नहीं किया गया है।

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

  • listView (ListView का उदाहरण)
  • नाम (आप ArrayList हैं)
  • saveCheckedName (सभी चेक किए गए नाम को इस Arraylist में सहेजें)

     SparseBooleanArray checkedPositions = listView.getCheckedItemPositions();
        for (int i = 0; i < subjectListView.getCount(); i++) {
                        if (checkedPositions.get(i) == true) {
                            saveCheckedName.add(names.get(i));
                        }
                    }
    

3
2017-09-26 21:51





कई अन्य चीजों की तरह, बहु-चयन करें ListViewएंड्रॉइड में एक असली समस्या है।

चयनित वस्तुओं को बस अनुरोध करने के बजाय List का Objectएस (प्रिय Google, हम यही उम्मीद करते हैं):

List selected_items = my_list_view.getSelectedItems();

हम इस शानदार हास्यास्पद एपीआई का उपयोग करने के लिए मजबूर हैं:

SparseBooleanArray checked = my_list_view.getCheckedItemPositions();
    int num_selected = 0;
    for(int i = 0; i < checked.size(); i++) {
        if(checked.valueAt(i)) {
            num_selected++;
            int key = checked.keyAt(i);
            boolean value = checked.get(key);
            if (value) {
                //
            }
        }
    }

भयानक नामित SparseBooleanArray यहां तक ​​कि अधिक भयानक नाम से बुलाकर आबादी है getCheckedItemPositions() पर ListView। लेकिन सूची में प्रत्येक चयनित / चेक किए गए आइटम की स्थिति वापस करने की बजाय, यह सूची में प्रत्येक आइटम की स्थिति देता है कभी भी छुआ था, चाहे वह वास्तव में चुना गया हो या नहीं! बात अविश्वसनीय जरूर है, लेकिन सही है।

यह गणना करने के लिए कि आइटम वास्तव में वर्तमान में चेक किया गया है, हमें परीक्षण करने के लिए मजबूर होना पड़ता है valueAt(i) सच्चाई के लिए वस्तुओं के सरणी को 'कभी छुआ' था।

इस पागलपन के अलावा, यदि हम चयनित वस्तुओं की संख्या की गणना करना चाहते हैं, तो हमें अपने स्वयं के काउंटर को बढ़ाने के लिए मजबूर होना पड़ता है (उदा। num_selected)।

इस तरह एपीआई के साथ, यह आश्चर्य की बात नहीं है कि डेवलपर्स बहुत गुस्से में हैं!


3
2018-01-26 17:15





मैं एक दूसरे ArrayList के साथ मुद्दा कैसे हल किया:

  1. एक दूसरा ArrayList उदाहरण बनाया
  2. अनचाहे आइटम के साथ ArrayList उदाहरण अद्यतन किया गया
  3. इसे मेरे सूची एडाप्टर में जोड़ा गया

    public void removeSelectedItems(){
    
    updatedList = new ArrayList<String>(); //initialize the second ArrayList
    
    int count = lv.getCount();  //number of my ListView items
    SparseBooleanArray checkedItemPositions = getListView().getCheckedItemPositions();
    for (int i=0;i < count;i++){
        if(!checkedItemPositions.get(i))
    
        updatedList.add(liveNames.get(i)); //liveNames is the current ArrayList     
        Log.e("TEST", liveNames.get(i));
    }
    
    adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_multiple_choice, updatedList);
    
    setListAdapter(adapter);}
    

उम्मीद है कि यह सहायक होगा :)


1
2018-02-10 12:58