Android 或者(int i=0;i
这是我的改编版本:Android 或者(int i=0;i,android,android-listview,Android,Android Listview,这是我的改编版本: public static List<Integer> getAbsListViewCheckedItemPositions(AbsListView absListView) { SparseBooleanArray checked = absListView.getCheckedItemPositions(); List<Integer> positions = new ArrayList<>(); int ch
public static List<Integer> getAbsListViewCheckedItemPositions(AbsListView absListView) {
SparseBooleanArray checked = absListView.getCheckedItemPositions();
List<Integer> positions = new ArrayList<>();
int checkedSize = checked.size();
for (int i = 0; i < checkedSize; i++) {
if (checked.valueAt(i)) {
positions.add(checked.keyAt(i));
}
}
return positions;
}
公共静态列表GetAbsListView检查编辑位置(AbsListView AbsListView){
SparseBooleanArray checked=absListView.GetCheckEditePositions();
列表位置=新的ArrayList();
int checkedSize=checked.size();
对于(int i=0;i
像许多其他东西一样,多选列表视图在Android中是一个真正的问题
与其简单地请求所选项目作为对象的列表
(亲爱的谷歌,这是我们所期望的):
我们被迫使用这个极其荒谬的API:
SparseBooleanArray checked = my_list_view.getCheckedItemPositions();
int num_selected = 0;
for(int i = 0; i < checked.size(); i++) {
if(checked.valueAt(i)) {
num_selected++;
int key = checked.keyAt(i);
boolean value = checked.get(key);
if (value) {
//
}
}
}
SparseBooleanArray checked=my_list_view.getCheckedItemPositions();
int num_selected=0;
对于(int i=0;i
通过调用列表视图
上名称更糟糕的getCheckEditePositions()
来填充名称更糟糕的SparseBooleanArray
。但是,它不会返回列表中每个选中/选中项目的位置,而是返回列表中每个曾经接触过的项目的位置,不管它当前是否实际选中难以置信,但却是真的
为了计算当前是否实际检查了该项,我们必须测试valueAt(i)
的真实性,同时循环检查“曾经接触过”项数组
除此之外,如果我们想计算所选项目的数量,我们似乎被迫增加自己的计数器(例如num\u selected
)
有了这样的API,难怪开发人员会生气 我们在Android实用程序类中使用这个。泛型有助于防止编译器警告,但如果适配器返回多个类型,则可以删除它们
public static <T> Collection<T> getCheckedItems(ListView listView) {
Collection<T> ret = new ArrayList();
SparseBooleanArray checkedItemPositions = listView.getCheckedItemPositions();
for (int i = 0; i < checkedItemPositions.size(); i++) {
if (checkedItemPositions.valueAt(i)) {
T item = (T) listView.getAdapter().getItem(checkedItemPositions.keyAt(i));
ret.add(item);
}
}
return ret;
}
公共静态集合getCheckedItems(ListView ListView){
Collection ret=new ArrayList();
SparseBooleanArray checkedItemPositions=listView.getCheckedItemPositions();
对于(int i=0;i
非常简单,使用下面的代码
listViewRequests.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
AppCompatCheckedTextView checkBox = (AppCompatCheckedTextView) view;
if (checkBox.isChecked() == true){
Log.i("CHECK",checkBox.isChecked()+""+checkBox.getText().toString());
}
}
});
listViewRequests.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
AppCompatCheckedTextView复选框=(AppCompatCheckedTextView)视图;
if(checkBox.isChecked()==true){
Log.i(“CHECK”,checkBox.isChecked()+”+checkBox.getText().toString());
}
}
});
for(int i=0;i
应在setAdapter()
method之后使用。您使用的是MultiAutoCompleteTextView吗?@preethi请查看此答案,它可能会有所帮助:此答案错误,您尝试过吗?或者这对我来说是错误的?在我的例子中,我只得到了12个结果,前7个结果为真,其余为假,我的多选列表中的项目总数为42,稀疏布尔值的键指向我的列表索引,请修改你的答案,因为它被标记为正确答案。我不希望有人因为错误的答案而失败,请保持整洁;)我认为本例中的kicker知道cont_list是您提供给适配器的原始列表。考虑到这一点,我不确定你怎么能让它不起作用。checked.get(i)将仅返回TRUE,如果索引i在原始列表项中被选中,并作为参数传递给适配器。简短而有用的回答,谢谢。它就像一个符咒一样工作,我们不需要删除未选中的项。For循环自动为我们做。这对我不起作用。Daren的解决方案适合我。如何在单击项目视图元素时选择项目,而不是选择所有项目?与Solid explorerforme一样,checked.size()始终返回0,并且值在开始时似乎达到12,但具有正确的键/值对。所以我只使用ListView的getCount来获得迭代的限制,并在遇到IndexOutofBoodsException时完成。丑陋的地狱,但迄今为止,它的工作。返回列表中的检查项目集。仅当选择模式未设置为选择模式时,结果才有效。答案不清楚。别误会我。我指的是语言语法。对我来说很有用。这种方式的代码比其他方式可读性强。哥们,这是一个很好的答案。我在Xamarin.Android中使用了这种技术。
SparseBooleanArray checked = tags.getCheckedItemPositions();
for (int i = 0; i < checked.size(); i++) {
if(checked.valueAt(i)) {
Tag tag = (Tag) tags.getItemAtPosition(checked.keyAt(i));
Log.i("xxxx", i + " " + tag);
}
}
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> listView, View selectedItem,
int position, long itemId) {
//Keep a reference here, and toggle a global variable.
SparseBooleanArray checked = lv.getCheckedItemPositions();
int size = checked.size(); // number of name-value pairs in the array
for (int i = 0; i < size; i++) {
int key = checked.keyAt(i);
boolean value = checked.get(key);
if (value)
doSomethingWithSelectedIndex(key);
}
SparseBooleanArray checkedPositions = listView.getCheckedItemPositions();
for (int i = 0; i < subjectListView.getCount(); i++) {
if (checkedPositions.get(i) == true) {
saveCheckedName.add(names.get(i));
}
}
public void removeSelectedItems(){
updatedList = new ArrayList<String>(); //initialize the second ArrayList
int count = lv.getCount(); //number of my ListView items
SparseBooleanArray checkedItemPositions = getListView().getCheckedItemPositions();
for (int i=0;i < count;i++){
if(!checkedItemPositions.get(i))
updatedList.add(liveNames.get(i)); //liveNames is the current ArrayList
Log.e("TEST", liveNames.get(i));
}
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice, updatedList);
setListAdapter(adapter);}
Foo objectAtCheckedRow = null;
for (int i = 0; i < positions.size(); i++) { //positions.size() == 2
objectAtCheckedRow = adapter.getItem(positions.keyAt(i));
//Do something significant with object here
}
/**
* Gets the checked positions in a list view.
*
* @param list the list view
*/
private int[] getCheckedPositions(ListView list) {
SparseBooleanArray positions = list.getCheckedItemPositions();
ArrayList<Integer> arrayList = new ArrayList<Integer>();
for (int i = 0; i < positions.size(); i++) {
int key = positions.keyAt(i);
if (positions.valueAt(i)) {
arrayList.add(key);
}
}
int[] result = new int[arrayList.size()];
for (int i = 0; i < arrayList.size(); i++) {
result[i] = arrayList.get(i);
}
return result;
}
public static List<Integer> getAbsListViewCheckedItemPositions(AbsListView absListView) {
SparseBooleanArray checked = absListView.getCheckedItemPositions();
List<Integer> positions = new ArrayList<>();
int checkedSize = checked.size();
for (int i = 0; i < checkedSize; i++) {
if (checked.valueAt(i)) {
positions.add(checked.keyAt(i));
}
}
return positions;
}
List selected_items = my_list_view.getSelectedItems();
SparseBooleanArray checked = my_list_view.getCheckedItemPositions();
int num_selected = 0;
for(int i = 0; i < checked.size(); i++) {
if(checked.valueAt(i)) {
num_selected++;
int key = checked.keyAt(i);
boolean value = checked.get(key);
if (value) {
//
}
}
}
public static <T> Collection<T> getCheckedItems(ListView listView) {
Collection<T> ret = new ArrayList();
SparseBooleanArray checkedItemPositions = listView.getCheckedItemPositions();
for (int i = 0; i < checkedItemPositions.size(); i++) {
if (checkedItemPositions.valueAt(i)) {
T item = (T) listView.getAdapter().getItem(checkedItemPositions.keyAt(i));
ret.add(item);
}
}
return ret;
}
listViewRequests.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
AppCompatCheckedTextView checkBox = (AppCompatCheckedTextView) view;
if (checkBox.isChecked() == true){
Log.i("CHECK",checkBox.isChecked()+""+checkBox.getText().toString());
}
}
});
for(int i =0; i< listView.getAdapter().getCount(); i++){
if(listView.isItemChecked(i)){
listView.getAdapter().getItem(i); // item
}
}