2010-05-12 19 views
9

यह android:choiceMode="multipleChoice" या setChoiceMode(ListView.CHOICE_MODE_MULTIPLE) एक ExpandableListView पर के साथ एक बहु-विकल्प सूची बनाने के लिए संभव है? मैं एक सादे ListView पर CheckBox तों के साथ ऐसा करने में सक्षम हूँ, लेकिन यह ExpandableListView के साथ काम करने लगता है। बाद में, सूची आइटम (या तो माता-पिता या बच्चे) पर क्लिक करके चेकबॉक्स को प्रभावित नहीं करता है क्योंकि यह पूर्व में करता है।क्या ExpodeableListView के साथ अनुकूल मोड अनुकूल है?

मैं देखा है कि यह चेकबॉक्स पर क्लिक करने के लिए वास्तव में यह टॉगल बनाने के लिए संभव है, लेकिन यह एक बहुत छोटा लक्ष्य है।

यहाँ एक relevant unanswered forum post है।

उत्तर

7

कुछ अध्ययनों के बाद, उत्तर नहीं है "चेक किया गया" स्थिति आंतरिक रूप से "स्थिति" द्वारा ट्रैक की जाती है, ताकि एक "अभिभावक" (उर्फ "समूह") चेक की गई सूची के नीचे एक तरीके से स्थानांतरित हो सके यदि सूची में पिछले माता-पिता का विस्तार किया गया है तो इसके ऊपर एक बच्चे को इसकी जांच करें।

मैं अपने खुद के डेटा संरचना में ट्रैकिंग checkmarks समाप्त हो गया।

+0

आपको बहुत बहुत धन्यवाद। इस जवाब ने मेरा समय बचाया। –

9

डिफ़ॉल्ट रूप से नहीं। स्रोत कोड जांचना आप फॉलो देख सकते हैं:

512  @Override 
513  public boolean performItemClick(View v, int position, long id) { 
514   // Ignore clicks in header/footers 
515   if (isHeaderOrFooterPosition(position)) { 
516    // Clicked on a header/footer, so ignore pass it on to super 
517    return super.performItemClick(v, position, id); 
518   } 
519   
520   // Internally handle the item click 
521   final int adjustedPosition = getFlatPositionForConnector(position); 
522   return handleItemClick(v, adjustedPosition, id); 
523  } 

533   boolean handleItemClick(View v, int position, long id) { 
534   final PositionMetadata posMetadata = mConnector.getUnflattenedPos(position); 
535   
536   id = getChildOrGroupId(posMetadata.position); 
537   
538   boolean returnValue; 
539   if (posMetadata.position.type == ExpandableListPosition.GROUP) { 
540    /* It's a group, so handle collapsing/expanding */ 
       ... 
579   } else { 
580    /* It's a child, so pass on event */ 
581    if (mOnChildClickListener != null) { 
582     playSoundEffect(SoundEffectConstants.CLICK); 
583     return mOnChildClickListener.onChildClick(this, v, posMetadata.position.groupPos, 
584       posMetadata.position.childPos, id); 
585    } 
586 
587    returnValue = false; 
588   } 
589 
590   posMetadata.recycle(); 
591 
592   return returnValue; 
593  } 

स्रोत: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/widget/ExpandableListView.java#ExpandableListView.handleItemClick%28android.view.View%2Cint%2Clong%29

यदि पंक्ति न पाद लेख, सुपर वर्ग की विधि performItemClick शीर्षक नहीं है समस्या यहाँ है (android.widget.AbsListView) कहा जाता है नहीं किया जाएगा, जो एक है जो खाता विकल्प मोड लेता है: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/widget/AbsListView.java#AbsListView.performItemClick%28android.view.View%2Cint%2Clong%29

तो, अद्वितीय समाधान onChildItemClickListener ourself में चुनाव तर्क लागू है। यहाँ एक से अधिक विकल्प के लिए नमूना कोड है:

https://github.com/jiahaoliuliu/ExpandableListViewMultipleChoice

+0

सरल समाधान के लिए धन्यवाद! –

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