0

В ExpandableListview я использую checkbox с Imageview в childviewIndexOutOfBoundsException в ArrayList, когда убрав флажок андроида

Для управления состоянием checkbox сборов в его собственность рециклинга я использовал ArrayList

Я не смог получить, где ошибка происходит, Pls помочь мне в этом случае

заранее спасибо

@Override 
    public View getChildView(int groupPosition, final int childPosition, 
      boolean isLastChild, View convertView, ViewGroup parent) { 

     String childText = (String) getChild(groupPosition, childPosition); 
     Log.e("_childText", "karjeevch "+childText); 


     int itemType = getChildType(groupPosition,childPosition);  


     ViewHolder viewHolder = null; 
     switch (itemType) { 

     case 0: 
      viewHolder = null; 
      convertView=null; 
      if (convertView==null) { 

       viewHolder=new ViewHolder();     
       convertView = infalInflater.inflate(R.layout.list_child_shape, null); 
       viewHolder.shape_name = (CheckBox) convertView.findViewById(R.id.shape_chk_box); 
       //viewHolder.shape_name = (TextView) convertView.findViewById(R.id.shape_chk_box); 
       viewHolder.img_shape_icon=(ImageView)convertView.findViewById(R.id.img_shape);     


       imageLoader.DisplayImage("http://rosycontact.com/shashvat/images/"+childText.toLowerCase()+".png", viewHolder.img_shape_icon);     
       Log.e("shape", "karjeevshp "+childText); 
       viewHolder.shape_name.setText(childText); 
       convertView.setTag(viewHolder);    


       //final TextView shape_name_temp=viewHolder.shape_name; 

       viewHolder.shape_name.setChecked(itemChecked.get(childPosition)); 
       final CheckBox shape_name_temp=viewHolder.shape_name; 
       viewHolder.shape_name.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

        @Override 
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
         // TODO Auto-generated method stub 

         int id=buttonView.getId(); 


         if (id==R.id.shape_chk_box) { 

          if (shape_name_temp.isChecked()==true) { 

           String shape_str=shape_name_temp.getText().toString(); 
           All_link.SHAPE_LIST.add(shape_str); 
           Toast.makeText(_context, shape_name_temp.getText().toString(), Toast.LENGTH_SHORT).show(); 
           Log.e("chk_shape", "karjeevch "+shape_name_temp.getText().toString());        
          } 
          else{ 
           String shape_str=shape_name_temp.getText().toString(); 
           All_link.SHAPE_LIST.remove(shape_str);               } 
         }                       
        } 
       }); 

       viewHolder.shape_name.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        if(position_of_click.contains (childPosition)){ 
         position_of_click.remove(childPosition); 
        } 
        else{ 
         position_of_click.add(childPosition); 
        } 
       } 
      }); 



       if(position_of_click.contains(childPosition)){ 
        viewHolder.shape_name.setChecked(true); 
       } 
       else{ 
        viewHolder.shape_name.setChecked(false); 
      } 

      } 
      else{ 
       //viewHolder=new ViewHolder(); 
       viewHolder=(ViewHolder)convertView.getTag(); 
       imageLoader.DisplayImage("http://rosycontact.com/shashvat/images/"+childText.toLowerCase()+".png", viewHolder.img_shape_icon);            
       viewHolder.shape_name.setText(childText);        
       convertView.setTag(viewHolder);        
      } 
      return convertView;  

Я получаю IndexOutOfBoundsException в строке position_of_click.remove(childPosition); когда я снимите флажок

ответ

0

Я считаю, что ваша переменным является ArrayList<Integer> объектом?

В этом случае позаботьтесь о методе remove(): вы хотите использовать remove(Object object), и вы используете remove(int index). Чтобы заставить код, чтобы использовать метод remove(Object object), вы должны привести свои аргументы, как:

position_of_click.remove((Integer)childPosition); 
+0

еще такая же проблема братан .. –

+0

Ммм ок к сожалению, так что вы можете использовать: INT индекс = position_of_click.indexOf (childPosition); position_of_click.remove (index); Но позаботьтесь, с помощью этого метода вы удалите только первое появление вашего значения childPosition, но я думаю, что это уникальное значение в вашем массиве? Если нет: http://stackoverflow.com/questions/12740701/how-to-remove-particular-data-from-arraylistinteger-in-android – Bubu

Смежные вопросы