2013-03-25 57 views
0

我有一個ArrayAdapter自定義組件和複選框。當我檢查的項目和向下滾動(新項目在getView()創建,作爲託運前未檢查CheckBoxes都標我部分理解爲什麼會發生,但我怎麼能避免它ArrayAdapter複選框行爲

這裏是我的getView(...)方法:

@Override 
      public View getView(final int position, final View convertView, 
        final ViewGroup parent) { 
       View v = convertView; 
       TagHolder tagHolder = null; 
       if (v == null) { 
        Log.d("Inside adapter getView()", "Extras have " 
          + CurrentRequest.getCarDetalized().getExtra() 
            .size() + " items"); 
        final LayoutInflater vi = (LayoutInflater) getContext() 
          .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        v = vi.inflate(R.layout.additional_component, null); 

        tagHolder = new TagHolder(); 
        tagHolder.extraName = (TextView) v 
          .findViewById(R.id.additional_info); 
        tagHolder.extraPrice = (TextView) v 
          .findViewById(R.id.additional_price); 
        v.setTag(tagHolder); 
        tagHolder.box = (CheckBox) v.findViewById(R.id.select); 

        tagHolder.box.setOnCheckedChangeListener(checkedItem); 

       } else { 
        tagHolder = (TagHolder) v.getTag(); 
       } 
       try { 
        final CarDetails.Extra extra = getItem(position); 
        tagHolder.box.setTag(position); 
        tagHolder.extraName.setText(extra.getName()); 
        tagHolder.extraPrice.setText(extra.getCurrency() + " " 
          + extra.getPrice()); 
        Log.d("Adapter", 
          "Set up adapter field with name " + extra.getName()); 
        Log.d("Inside adapter", "extras size is " 
          + d.getExtra().size()); 
        } catch (final Exception e) { 
        e.printStackTrace(); 
        System.exit(0); 
        Log.e("CarList", "Error setting cell" + e); 
       } 
       return v; 
      } 

解決

回答

0

的Android重用滾動時前一行;他們中的一些已經被驗證後,您將需要直接設置它:!

   final CarDetails.Extra extra = getItem(position); 
       tagHolder.box.setTag(position); 
       tagHolder.extraName.setText(extra.getName()); 
       tagHolder.extraPrice.setText(extra.getCurrency() + " " 
         + extra.getPrice()) 
       // Add this: 
       tagHolder.box.setChecked(myMethodToCheckIfItemIsChecked(extra))