Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 或者(int i=0;i_Android_Android Listview - Fatal编程技术网

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
        }
    }