2016-03-28 142 views
1

我有一个ListViewCheckBoxEditText。我想要点击Button获取CheckBoxes的名称和EditText的值。我怎样才能做到这一点?如何让按钮点击ListView项目?

我getView()方法:

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     convertView = inflater.inflate(R.layout.scrap_list_row_item, parent, false); 
     final EditText kg = (EditText) convertView.findViewById(R.id.editText1); 
     final CheckBox cb = (CheckBox) convertView.findViewById(R.id.checkBox1); 
     final TextView txtKg = (TextView) convertView.findViewById(R.id.textView1); 
     final float scale = context.getResources().getDisplayMetrics().density; 
     cb.setPadding(cb.getPaddingLeft() + (int)(10.0f * scale + 0.5f), 
       cb.getPaddingTop(), 
       cb.getPaddingRight(), 
       cb.getPaddingBottom()); 
     //cb.setText(modelItems[position].getName()); 
     cb.setText(arrayScrapItems.get(position).getItemName()); 

     cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

       @Override 
       public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
        if(isChecked) 
        { 
         // Toast.makeText(context, "You checked " + arrayScrapItems.get(position).getItemName(), Toast.LENGTH_SHORT).show(); 
         cb.setButtonDrawable(R.drawable.checkbox_background_active); 
         kg.setBackgroundResource((R.drawable.kg_box)); 
         txtKg.setTextColor(Color.parseColor("#000000")); 
         kg.setFocusable(true); 
         kg.setEnabled(true); 
        } 
        else 
        { 
         //Toast.makeText(context, "You unchecked " + arrayScrapItems.get(position).getItemName(), Toast.LENGTH_SHORT).show(); 
         cb.setButtonDrawable(R.drawable.checkbox_background); 
         kg.setBackgroundResource((R.drawable.kg_box_inactive)); 
         txtKg.setTextColor(Color.parseColor("#D3D3D3")); 
         kg.setFocusable(false); 
         kg.setEnabled(false); 
        } 
       } 
      } 
     ); 

     return convertView; 
+0

有很多ListView复选框的教程 – Piyush

回答

0

由于ListView控件回收它的意见,你不能,在按钮的情况下点击通过所有列表项,看看他们进行检查或没有,因为只有在列表中可以看到很多视图。例如。如果列表中有1000行,其中20行可以同时显示在屏幕上,那么您的ListView只有20个视图(即20个CheckBox和20个EditText),并且由您的ListAdapter实现来填充它们的正确数据1000行中的任何一行,具体取决于用户滚动列表的距离。

因此,您将不得不跟踪检查的行以及它在某种离屏模式下的文本。

而且当您在模型中拥有所有这些信息时,您可以轻松访问它,那么会提示该按钮被单击。

因此,首先,如果convertView为空,您将需要以只创建新视图的方式更改代码。如果它不为空,则只需将其更新为视图的状态即可,该状态为给定的position处的行状态。此状态应该来自您的屏幕外模型。

希望这个答案带给你正确的轨道,无论如何你应该熟悉ListViews回收视图的方式。