2015-07-13 73 views
0

我已经在列表中实现了带有复选框的名称,这里我的目的是检查复选框并获取相应的名称。在这里,我已经在适配器和活动类中编写代码,但是我没有得到任何价值,也没有显示任何错误。如何获得选定的复选框值

这里我的适配器代码..

public Add_member_adapter(Context a, ArrayList<ItemsModel> d) { 

     context = a; 
     data = d; 

     checkedHolder = new boolean[data.size()]; 

     inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 

    public int getCount() { 
     if (data.size() <= 0) 
      return 1; 
     return data.size(); 
    } 


    public final Object getItem(int position) { 
     return data.get(position); 
    } 

    public final long getItemId(int position) { 
     return position; 
    } 

    public static class ViewHolder { 

     public TextView Name, UserId_Fk; 
     CheckBox chkbox; 

    } 

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

     Log.d("getview:", "position=" + position); 
     vi = convertView; 
     final ViewHolder holder; 

     if (convertView == null) { 

      vi = inflater.inflate(R.layout.add_members_list_item, null); 
      holder = new ViewHolder(); 

      holder.Name = (TextView) vi.findViewById(R.id.Name); 
      holder.UserId_Fk = (TextView) vi.findViewById(R.id.CusId_Fk); 
      holder.chkbox = (CheckBox) vi.findViewById(R.id.chkbox); 

      vi.setTag(holder); 
     } else { 

      holder = (ViewHolder) vi.getTag(); 

     } 
     if (data.size() <= 0) { 

      vi.setVisibility(View.GONE); 

     } else { 

      tempValues = null; 
      tempValues = (ItemsModel) data.get(position); 

      holder.Name.setText(tempValues.getItemName().toString()); 
      Log.i(TAG, "Name " + tempValues.getItemName().toString()); 
      holder.UserId_Fk.setText(tempValues.getUserId_Fk().toString()); 
      holder.chkbox.setChecked(false); 

      holder.chkbox.setChecked(checkedHolder[position]); 
      Log.i(TAG, "Position " + checkedHolder[position]); 

      holder.chkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
         @Override 
         public void onCheckedChanged(CompoundButton buttonView, 
           boolean isChecked) { 

          checkedHolder[position] = isChecked; 

          Log.i(TAG, "Position " + checkedHolder[position]); 
         } 
        }); 

     } 
     return vi; 
    } 

在活动...

list.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 

       // String Name = list.getItemAtPosition(position).toString(); 
       // CheckBox cb = (CheckBox) view.findViewById(R.id.chkbox); 
       // TextView tv = (TextView) view.findViewById(R.id.Name); 

       for (int i = 0; i < adapter.getCount(); i++) { 

        if (adapter.checkedHolder[i]) { 
         // get all name values that checked by user 
         Name = ((TextView) findViewById(R.id.Name)).getText() 
           .toString(); 
         Log.i(TAG, "Name " + Name); 
        } 
       } 

      } 

     }); 
+0

首先,什么是适配器的超级类?为什么你返回1,当你的数据列表是空的?如果列表为空,则不必在'getView()'中隐藏视图。 –

+0

并提供您的代码ItemsModel –

+0

好吧,我会改变这一点,可以指导我为什么选中的值不会到来 –

回答

0

改变你的setOnItemClikListener如下

for (int i = 0; i < adapter.getCount(); i++) { 
     if (adapter.checkedHolder[i]) { 
      // get all name values that checked by user 
      Name = data.get(i).getItemName().toString(); 
      Log.i(TAG, "Name " + Name); 
} 

getView relpace holder.chkbox.setChecked(false);低于线;

holder.chkbox.setOnCheckedChangeListener(null); 
+0

我不能把getItemName() –

+0

数据放在你的ArrayList中