下面列出了android.widget.AbsListView#CHOICE_MODE_MULTIPLE 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
protected void processSelectedStates(ListView listView, ConfigureAdapterItem[] items) {
final int choiceMode = listView.getChoiceMode();
if (choiceMode == AbsListView.CHOICE_MODE_MULTIPLE) {
final SparseBooleanArray array = listView.getCheckedItemPositions();
int key;
for (int i = 0; i < array.size(); i++) {
key = array.keyAt(i);
items[key].setChecked(array.valueAt(i));
}
} else if (choiceMode == AbsListView.CHOICE_MODE_SINGLE) {
final int position = listView.getCheckedItemPosition();
for (int i = 0; i < items.length; i++) {
items[i].setChecked(i == position);
}
}
}
private boolean isMultiChoiceList() {
return choicesList.getChoiceMode() == AbsListView.CHOICE_MODE_MULTIPLE;
}
/**
* Sets the checked state of the specified position. The is only valid if
* the choice mode has been set to {@link AbsListView#CHOICE_MODE_SINGLE} or
* {@link AbsListView#CHOICE_MODE_MULTIPLE}.
*
* @param position The item whose checked state is to be checked
* @param value The new checked state for the item
*/
public void setItemChecked(int position, boolean value) {
if (mChoiceMode == AbsListView.CHOICE_MODE_NONE) {
return;
}
// Start selection mode if needed. We don't need to if we're unchecking something.
if (value && mAttachedRecyclerView != null) {
startSelectionModeIfNeeded(mAttachedRecyclerView);
}
if (mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE || mChoiceMode == AbsListView.CHOICE_MODE_MULTIPLE_MODAL) {
boolean oldValue = mCheckStates.get(position);
mCheckStates.put(position, value);
if (mCheckedIdStates != null && hasStableIds()) {
if (value) {
mCheckedIdStates.put(getItemId(position), position);
} else {
mCheckedIdStates.delete(getItemId(position));
}
}
if (oldValue != value) {
if (value) {
mCheckedItemCount++;
} else {
mCheckedItemCount--;
}
updateCheckStateIfPossible(null, position);
fireOnSelected(null);
}
if (mChoiceActionMode != null) {
final long id = getItemId(position);
mMultiChoiceModeCallback.onItemCheckedStateChanged(mChoiceActionMode,
position, id, value);
}
} else {
int checkedPosition = getCheckedItemPosition();
boolean updateIds = mCheckedIdStates != null && hasStableIds();
// Clear all values if we're checking something, or unchecking the currently
// selected item
if (value || isItemChecked(position)) {
mCheckStates.clear();
if (updateIds) {
mCheckedIdStates.clear();
}
}
// this may end up selecting the value we just cleared but this way
// we ensure length of mCheckStates is 1, a fact getCheckedItemPosition relies on
if (value) {
mCheckStates.put(position, true);
if (updateIds) {
mCheckedIdStates.put(getItemId(position), position);
}
mCheckedItemCount = 1;
} else if (mCheckStates.size() == 0 || !mCheckStates.valueAt(0)) {
mCheckedItemCount = 0;
}
if (checkedPosition != position) {
if (checkedPosition != AbsListView.INVALID_POSITION)
updateCheckStateIfPossible(null, checkedPosition);
updateCheckStateIfPossible(null, position);
fireOnSelected(null);
}
}
}
@Override
protected int getListViewChoiceMode() {
return AbsListView.CHOICE_MODE_MULTIPLE;
}
@Override
protected int getListViewChoiceMode() {
return AbsListView.CHOICE_MODE_MULTIPLE;
}
@Override
protected int getListViewChoiceMode() {
return AbsListView.CHOICE_MODE_MULTIPLE;
}