selectAll, unSelectAll两个操作的实现

private void updateBatchSelectionStatus() {
    ContactListAdapter.ViewHolder viewHolder = null;
    TxrjContact contact = null;
    int size = mContacts.size();
    boolean select = (getSelectCount() == mContacts.size() ? true : false);
    for(int i=0;i<size;i++){
        viewHolder = (ContactListAdapter.ViewHolder)mListView.getChildAt(i).getTag();
        contact = mContacts.get(i);
        contact.setSelected(select);
        viewHolder.select
                .setImageBitmap(select ? mListAdapter.checkBox
                        : mListAdapter.unCheckBox);
    }
}

红色语句出现空指针异常,原因分析:

mContacts可能有100个TxrjContact,但是mListView不可能一下子有100个child,每次只显示可视区域中的几个view。

将以上方法改写成

private void updateBatchSelectionStatus() {
    int size = mContacts.size();
    boolean select = (getSelectCount() != mContacts.size() ? true : false);
    for(int i=0;i<size;i++){
        mContacts.get(i).setSelected(select);
        mListAdapter.notifyDataSetChanged();
    }
}

再执行就符合预期效果

点击事件处理程序

} else if(v == mSelectAll) {
    updateBatchSelectionStatus();
    updateSelectButtonText();
}

原文地址:https://www.cnblogs.com/fengzhblog/p/3188896.html