2011-06-15 31 views
5

Birden fazla checkboxes ile bir listedeki kişileri okumaya çalışıyorum, ancak sparsebooleanarray numaralı telefonu aradığımda .. tüm liste girdileri için yanlış döndüyse .. biri ben bu konuya Why is ListView.getCheckedItemPositions() not returning correct values? içine baktı ... işaretli s ... Ama ben stops..this zorlamak addClickHandlerToCheckBox uyguladıklarında .. 4 days..please herhangi bir yardım içinListView.getCheckedItemPositions kontrol edilemedi Kontrol edilen öğeler SparseBooleanArray

public void populateContactList() { 
    // Build adapter with contact entries 
    final Cursor cursor = getContacts(); 
    String[] fields = new String[] { 
      ContactsContract.Data.DISPLAY_NAME 
    }; 

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.contact_entry, cursor, 
      fields, new int[] {R.id.contactEntryText}); 
    mContactList.setAdapter(adapter); 
    mContactList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 



    proceedButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 


      SparseBooleanArray checked=mContactList.getCheckedItemPositions(); 

      int len = mContactList.getCount(); 


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

       if(checked.get(i)==true) 
       { 

        String item = mContactList.getAdapter().getItem(checked.keyAt(i)).toString(); 
        edt.append(","+item); 

       } 


      } 
     } 



    });     
} 

cevap

1

I adamcağız beni Liste Bağdaştırıcısı görünümünü kullanmanız gerektiğini düşünün.

OnCheckedChanged dinleyicisini verecek, böylece konumu da alacaksınız.

gibi

...

holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       int cupos = position+1; 

      } 
     });   

Şimdi bütün örnek bak:

Listview.setAdapter(new settingsBase(getApplicationContext())); 

private class settingsBase extends BaseAdapter{ 

    public settingsBase(Context context) { 
     layoutInflater = LayoutInflater.from(context); 
    } 

    @Override 
    public int getCount() { 
     return listview.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     ViewHolder holder ; 
    holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       int cupos = position+1; 

      } 
     });   


     return convertView; 
    } 

    class ViewHolder{ 
     TextView txtSettingname , txtShow ; 
     RadioButton radioButton ; 
    }  
} 

bu deneyin - bu pozisyon almak için yardımcı ve doğru veya yanlış işaretli olsun edecektir.

İlgili konular