2

我开发了一个多项选择列表视图,我的问题是如何在选中复选框时进行 if 语句或切换到该位置。

我一直在网上寻找,我找到了一些例子,但不是我要找的。

例如这段代码:

public void onClick(View v) {
    String selected = "";
    int cntChoice = myList.getCount();

    SparseBooleanArray sparseBooleanArray = myList.getCheckedItemPositions();

    for(int i = 0; i < cntChoice; i++){
        if(sparseBooleanArray.get(i)) {
            selected += myList.getItemAtPosition(i).toString() + "\n";
        }
    }

    Toast.makeText(AndroidListViewActivity.this, selected, Toast.LENGTH_LONG).show();
}

所做的是从多项选择中取出所有选中的复选框,然后放入一个数组中。我的问题是我如何识别它是什么,以及检查是否做某事。

谢谢

4

1 回答 1

0

默认不是。检查源代码,您可以看到以下内容:

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。查看%2Cint%2Clong%29

这里的问题是如果该行既不是页眉也不是页脚,则不会调用超类(android.widget.AbsListView)的方法performItemClick,这是考虑选择模式的方法: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 中实现选择逻辑。以下是多项选择的示例代码:

https://github.com/jiahaoliuliu/ExpandableListViewMultipleChoice

这个问题可能会重复: SelectMode 是否与 ExpandableListView 兼容?

于 2013-09-04T16:52:57.223 回答