2013-11-27 59 views
0

嗨我想获取检查的项目和存储在数据库中,但是当我点击按钮保存以获取项目的大小检查得到每次大小为零。当点击列表中的项目时,它只会检查项目的唯一大小,但如果项目未被检查,仍然是。 所以它为我创造的问题帮助我谢谢。 这里是我的代码是如何获取从列表视图中检查的选中项目?

CustomAdapter.java

public class CustomAdapter extends ArrayAdapter<ContactDetails>{ 

    List<ContactDetails> listcontacts=null; 
    private LayoutInflater mInflater=null; 
    private SparseBooleanArray mSelectedItemsIds; 

    public CustomAdapter(Activity context, List<ContactDetails> list) { 
     super(context, 0); 
     mInflater = context.getLayoutInflater(); 
     mSelectedItemsIds = new SparseBooleanArray(list.size()); 
     this.listcontacts=list; 
    } 

    @Override 
    public int getCount() { 
     return listcontacts.size(); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

      View view = null; 
      if (convertView == null) { 

       view = mInflater.inflate(R.layout.contacts_row, null); 
       final ViewHolder viewHolder = new ViewHolder(); 
       viewHolder.txtname = (TextView) view.findViewById(R.id.textView_name); 
       viewHolder.txtphonenum = (TextView) view.findViewById(R.id.textView_phonenum); 
       viewHolder.checkbox = (CheckBox) view.findViewById(R.id.checkBox_check); 
       viewHolder.checkbox.setFocusable(false); 
       viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

        @Override 
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
         ContactDetails element = (ContactDetails) viewHolder.checkbox.getTag(); 
         element.setSelected(buttonView.isChecked()); 


        } 
        }); 

       view.setTag(viewHolder); 
       viewHolder.checkbox.setTag(listcontacts.get(position)); 
      } else { 
       view = convertView; 
       ((ViewHolder) view.getTag()).checkbox.setTag(listcontacts.get(position)); 
      } 
      ViewHolder holder = (ViewHolder) view.getTag(); 
      holder.txtname.setText(listcontacts.get(position).getName()); 
      holder.txtphonenum.setText(listcontacts.get(position).getPhonenumber()); 
      holder.checkbox.setChecked(listcontacts.get(position).isSelected()); 
      return view; 
    } 

    private static class ViewHolder { 

      TextView txtname; 
      TextView txtphonenum; 
      CheckBox checkbox; 

     } 
} 

MuListview类是

public class AddChoiceContactList extends Activity implements OnClickListener, OnItemClickListener{ 

     private ListView listview=null; 
     private Context context=null; 
     private DataBaseHelper db=null; 
     CustomAdapter adapter=null; 
     private Button btnsave=null; 

     List<ContactDetails> list=new ArrayList<ContactDetails>(); 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.choicelist); 
      context=this; 

      listview =(ListView)findViewById(R.id.listView_choice); 
      btnsave=(Button)findViewById(R.id.button_save); 
      btnsave.setOnClickListener(this); 
      listview.setOnItemClickListener(this); 


     } 
     @Override 
     protected void onResume() { 
      super.onResume(); 

      list=db.GetDataContacts(); 
      if(list.size()>0){ 
       //listview=getListView(); 
       Toast.makeText(context, "size is: "+list.size(), Toast.LENGTH_LONG).show(); 
       adapter=new CustomAdapter(AddChoiceContactList.this, list); 
       listview.setAdapter(adapter); 
       listview.setItemsCanFocus(false); 
       listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 

      } 
      else{ 
       Toast.makeText(context, "No Contacts Add contats plz!", Toast.LENGTH_LONG).show(); 
      } 
     } 


     @Override 
     public void onClick(View arg0) { 

      SparseBooleanArray checked=listview.getCheckedItemPositions(); 
// here m getting size zero when checked then   Toast.makeText(context, "checked size is: "+checked.size(), Toast.LENGTH_LONG).show(); 
      ArrayList<UpdatedContact> selectedItems = new ArrayList<UpdatedContact>(); 
      for (int i = 0; i < checked.size(); i++) { 
       int position = checked.keyAt(i); 
       if (checked.valueAt(i)){ 
        ContactDetails detils=adapter.getItem(position); 

       } 
      } 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

     } 

    } 
+0

是项目检查? –

+0

当复选框检查,然后仍然给零大小 –

+0

它给予大小,当ckick在物品上,并使chekbox检查,然后它给的大小,但是当没有使物品点击和检查,然后它给零的大小 –

回答

1

首先采取的列表ArrayList<ContactDetails> checkedList为gloabl和consstructor初始化..

写方法如下在您的自定义适配器

在您对您 Activity

onItemClickListener那么你会得到所有的检查项目

private ArrayList<ContactDetails> getCheckedItems() { 
    return checkedList; 
} 

,改变你的复选框更改侦听这样的..

checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (isChecked) { 
      checkedList.add(list.get(position)); 
     }else { 
      checkedList.remove(list.get(position)); 
     } 
     } 
    }); 

并调用adapter.getCheckedItems(); ..

+0

得到(位置)给位置错误找不到 –

+0

位置已经存在public View getView(int position,View convertView,ViewGroup parent)传递该int值并将其更改为final .. –

0

请尝试这样的事情。

  1. 在您的主要活动上有一个静态HashMap。
  2. 在您的活动中实施两种方法,AddSelection和RemoveSelection
  3. 在您的适配器上,实现onCheckedStateChanged侦听器,并根据列表中的位置执行添加或删除操作。

您的活动:

private static HashMap<Integer,Integer> selectedPositions = new HashMap<Integer,Integer>(); 
    public static boolean isSelected(int position){ 
     System.out.println("#### Position: " + position + " Value: " + selectedPositions.containsKey(position)); 
     return selectedPositions.containsKey(position); 
    } 

    public static void addSelection(int position){ 
     System.out.println("#### Puttin Position: " + position); 
     selectedPositions.put(position,position); 
    } 

public static void removeSelection(int position){ 
    System.out.println("#### Removing Position: " + position); 
    selectedPositions.remove(position); 
} 

在您的适配器:

checkbox.setChecked(MainActivity.isSelected(position)); 

checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 

    @Override 
    public void onCheckedChanged(CompoundButton view, boolean state) { 
     // TODO Auto-generated method stub 
     if(state == true){ 
      MainActivity.addSelection(position); 
     }else{ 
      MainActivity.removeSelection(position); 
     } 
    } 

}); 

现在完蛋了,只要你想通过hasmap以找出选定的项目重复,请务必清除它当工作完成后,否则你最终会一次又一次地堆放选定的职位。

相关问题