SparseBooleanArray为listview中未选中的项目赋予true

时间:2014-04-10 07:44:22

标签: android listview android-listview

我的listview来自一个布局,其id是@android:id / list。它是android.R.id.list的一部分。我使用SimpleCursorAdapter将adapter设置为listview。列表视图包含联系人姓名的复选框,例如Emily Andrews,Susan John ......我想知道用户选择的联系人姓名。当使用下面的代码时,由于某种原因,它在我未选中的列表中给出了随机联系人姓名。例如,虽然我有Emily检查,而Matt Jones未经检查。它在未选中的列表中都有两个。此外,无论我在列表视图中检查和取消选中,它总是在我未选中的列表中为我提供前两个联系人,并且不会为我的选中列表打印任何内容。有什么方法可以解决这个问题吗?

public void blockCheckedItems(View view) {  
    // int cntChoice = lv.getCount();
     checked = new ArrayList<String>();
     unchecked = new ArrayList<String>();

    int itempositions=adapter.getCount();

    SparseBooleanArray sparseBooleanArray = lv.getCheckedItemPositions();
    int countChoice = lv.getChildCount();

    Log.d("" + countChoice, "CountChoice===============================");
    Log.d("" + sparseBooleanArray,"sparseBooleanArray -------------------------");



     for(int i = 0; i < countChoice; i++)
     {

          if(sparseBooleanArray.valueAt(i) == true) 
          {
              Cursor  cursor = (Cursor) lv.getItemAtPosition(i);
              String name = cursor.getString(1);
              checked.add(name);

          }
          else  if(sparseBooleanArray.valueAt(i) == false) 
          {
              Cursor  cursor = (Cursor) lv.getItemAtPosition(i);
              String name = cursor.getString(1);
              unchecked.add(name);
          }

      }
     for(int i = 0; i < checked.size(); i++){
         Log.d("checked list&&&&&&&&&&&&&&&&&&&", "" + checked.get(i));
     }
     for(int i = 0; i < unchecked.size(); i++){
         Log.d("in unchecked list&&&&&&&&&&&&&&&&&&&", "" + unchecked.get(i));
     }


 }

1 个答案:

答案 0 :(得分:1)

尝试这个,让我知道我错了

public void blockCheckedItems(View view) {
    ArrayList<String> checked = new ArrayList<String>();
    ArrayList<String> unchecked = new ArrayList<String>();

    SparseBooleanArray sparseBooleanArray = listView.getCheckedItemPositions();

    for (int i = 0; i < listView.getCount(); i++) {
        Cursor cursor = (Cursor) listView.getItemAtPosition(i);
        String name = cursor.getString(1);
        if (sparseBooleanArray.get(i)) {
            checked.add(name);
        } else {
            unchecked.add(name);
        }
    }
    for (int i = 0; i < checked.size(); i++) {
        Log.d("checked list&&&&&&&&&&&&&&&&&&&", "" + checked.get(i));
    }
    for (int i = 0; i < unchecked.size(); i++) {
        Log.d("in unchecked list&&&&&&&&&&&&&&&&&&&", "" + unchecked.get(i));
    }
}