【发布时间】:2012-09-08 12:15:52
【问题描述】:
我正在使用此方法检查列表中有多少项已检查,我收到此错误,表明此方法不适用于任何早于 11 的 SDK。
API 级别 8 中 this 的等价物是什么
【问题讨论】:
标签: android compatibility
我正在使用此方法检查列表中有多少项已检查,我收到此错误,表明此方法不适用于任何早于 11 的 SDK。
API 级别 8 中 this 的等价物是什么
【问题讨论】:
标签: android compatibility
接受的答案对我不起作用(总是返回 0),我不得不使用以下代码:
public static int getCheckedItemCount(ListView listView)
{
if (Build.VERSION.SDK_INT >= 11) return listView.getCheckedItemCount();
else
{
int count = 0;
for (int i = listView.getCount() - 1; i >= 0; i--)
if (listView.isItemChecked(i)) count++;
return count;
}
}
【讨论】:
SparseBooleanArray)并仅在positions.valueAt(idx) 为真时增加count++。
isItemChecked 是在我的情况下唯一可靠工作的方法!
SparseBooleanArray 被滥用了。它不是所有选中项的数组,它是已修改项的稀疏数组,稀疏数组中的值是一个布尔值,表示是否选中。您不能使用SparseBooleanArray#size() 来确定@987654328@ - 您必须迭代SparseBooleanArray 并检查该值以确保它是真的。
getCheckedItemIds().length 似乎可以解决问题
【讨论】:
我正在使用我认为有效且适用于所有情况的代码:
public int getCheckedItemCount() {
ListView listView = getListView();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
return listView.getCheckedItemCount();
}
SparseBooleanArray checkedItems = listView.getCheckedItemPositions();
int count = 0;
for (int i = 0, size = checkedItems.size(); i < size; ++i) {
if (checkedItems.valueAt(i)) {
count++;
}
}
return count;
}
如果您发现它不起作用的情况,请通知我。
【讨论】: