2015-06-26 3 views
0

У меня возникла странная проблема: у меня есть Listview, который содержит checkbox в каждой строке. Когда checkbox равно checked или unchecked Я обновляю значение edittext за пределами listview, формируя соответствующее числовое значение от textview. Но проблема я столкнулся в том, что, когда я прокручивать listviewcheckboxes Я проверил стать unchecked также значение edittext вне listview обновляется accordingly.My пользовательских adapter, как показано ниже:Изменения в списке просмотров списка Android для прокрутки

public class ListAdapter extends BaseAdapter { 
     Context ctx; 
     LayoutInflater lInflater; 
     ArrayList<LItem> lstItems; 
     TextView tvAQuantity , tvBQuantity; 
     EditText etQuantity ; 
     LItem p; 
     ViewHolder holder; 

     ListAdapter(Context context, ArrayList<LItem> objects) { 
      ctx = context; 
      lstItems = objects; 
      // lInflater = (LayoutInflater) ctx .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     } 

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

     @Override 
     public Object getItem(int position) { 
      return lstItems.get(position); 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      View view = convertView; 

      if (view == null) { 
       lInflater = (LayoutInflater) ctx .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       view = lInflater.inflate(R.layout.list_style_task 
         , parent, false); 


       holder = new ViewHolder(); 

       holder.tvAQuan = (TextView) view.findViewById(R.id.tvAQuantity); 
       holder.tvBQuan=(TextView)view.findViewById(R.id.tvBQuantity); 
       holder.etQuan=(EditText)view.findViewById(R.id.etTaskQuantity); 


       holder.tvMatN= (TextView) view.findViewById(R.id.tvMaterial) ; 
       holder.tvTksN= (TextView) view.findViewById(R.id.tvTask) ; 
       holder.chkSelect=(CheckBox)view.findViewById(R.id.chkSelected); 
       holder.btnRefreshQuantity=(Button)view.findViewById(R.id.btnRefreshQuantity); 
       //SelectQuantity=(EditText)findViewById(R.id.etSQuantity); 
       view.setTag(holder); 

       // tvAQuantity.setText(p.getAQ()); 
       // etQuantity.setTag(position); 

      } 
      else { 

       holder=(ViewHolder)view.getTag(); 
       } 
      p = getProduct(position); 
      if(p!=null) { 
       if (holder.tvAQuan != null) { 


        holder.tvAQuan.setText(p.getAQ()); 
        holder.tvBQuan.setText(p.getBQ()); 
        holder.tvMatN.setText(p.getMName()); 
        holder.tvTksN.setText(p.getTName()); 

        holder.chkSelect.setChecked(p.getSelected()); 


       } 
      } 

     final int  posi=position; 

      holder.btnRefreshQuantity.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        RelativeLayout rl = (RelativeLayout)v.getParent(); 

        holder.tvAQuan = (TextView) rl .findViewById(R.id.tvAQuantity); 
        holder.tvBQuan = (TextView) rl .findViewById(R.id.tvBQuantity); 
        holder.etQuan=(EditText)rl.findViewById(R.id.etTaskQuantity); 

        if(Float.parseFloat (holder.etQuan.getText().toString())<=Float.parseFloat (holder.tvBQuan.getText().toString())) 
        { 
         p = getProduct(posi); 
         p.setAQ(holder.etQuan.getText().toString()); 
         String s = holder.etQuan.getText().toString(); 
         notifyDataSetChanged(); 
        } 
        else 
        { 
         Toast.makeText(myactivity,"Quantity should be less than balance quantity!",Toast.LENGTH_SHORT).show(); 

        } 
       } 
      }); 



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

        if(isChecked) 
        { 
         p = getProduct(position); 
         p.setSelected(true); 
         float total=Float.parseFloat (etSelectedQuantity.getText().toString())+Float.parseFloat(p.getAQ().toString()); 
         etSelectedQuantity.setText(Float.toString(total)); 



        } 
        else 
        { 

         p = getProduct(position); 
         p.setSelected(false); 
         float total=Float.parseFloat (etSelectedQuantity.getText().toString())-Float.parseFloat(p.getAQ().toString()); 
         etSelectedQuantity.setText(Float.toString(total)); 

        } 
       } 
      }); 




      // CheckBox cbBuy = (CheckBox) view.findViewById(R.id.checkbox); 
      //cbBuy.setOnCheckedChangeListener(myCheckChangList); 
      // cbBuy.setTag(position); 
      // cbBuy.setChecked(p.selected); 
      return view; 
     } 

     LItem getProduct(int position) 
     { 
      return ((LItem) getItem(position)); 
     } 

     ArrayList<LItem> getBox() { 
      ArrayList<LItem> box = new ArrayList<LItem>(); 
      for (LItem p : lstItems) { 
       // if (p.selected) 
       // box.add(p); 
      } 
      return box; 
     } 




     private class ViewHolder{ 

      public TextView tvAQuan; 
      public TextView tvBQuan; 
      public EditText etQuan; 
      public TextView tvMatN; 
      public TextView tvTksN; 
      public CheckBox chkSelect; 
      public Button btnRefreshQuantity; 

     } 

    } 
+0

Зачем опускать вопрос, если вы не можете ответить. Я думаю, что вопрос ясен, и для новых вопросов эти проблемы сложны. – Xgamer

ответ

0

попробовать это,

  if (view == null) { 
      ...... 
      } 
      else { 
      ....... 
      } 
     holder.chkSelect.setOnCheckedChangeListener(null);// you need to set listener to null. 
      p = getProduct(position); 
      if(p!=null) { 
       if (holder.tvAQuan != null) {  
        holder.tvAQuan.setText(p.getAQ()); 
        holder.tvBQuan.setText(p.getBQ()); 
        holder.tvMatN.setText(p.getMName()); 
        holder.tvTksN.setText(p.getTName()); 

        holder.chkSelect.setChecked(p.getSelected()); 
       } 
      } 
    // place remaining code... 
+0

thx но не работает – Xgamer

+0

обновленный мой код проверяет его один раз. –

+0

это сработало ... но вы можете объяснить, что он делает, или вы можете отправить мне ссылку, из которой я могу узнать об этой проблеме. Большое спасибо. – Xgamer

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