EditText丢失内容以移动列表视图

时间:2013-03-05 17:05:27

标签: java android listview adapter

我的滚动列表中的EditText有问题,EditText的内容变得杂乱,所以我读了它,因为使用较少的内存是重新分配的ID。我已经阅读了相同的查询和关于这个主题的答案,但我无法解决。

我非常感谢你的帮助,我是移动设备的新编程

这是我的代码:

public class AdapterFilaProducto extends BaseAdapter {
  protected Activity activity;
  protected ArrayList<ItemFilaProducto> items;
  protected ItemFilaProducto item;
  protected String tipo;
  protected Mascaras msk = new Mascaras();
  public ImageButton btnImDerecha ;
  public ImageButton btnImIzquierda;
  public TextView producto;
  private InterfazSeleccionProducto contex;  
  private BaseDataAdapter db;
  private TextView precioCantidad;
      TextView precio;

  public AdapterFilaProducto(Activity activity, ArrayList<ItemFilaProducto> items,String tipo) {
    this.activity = activity;
    this.items = items;
    this.tipo = tipo;
  }
  public AdapterFilaProducto(Activity activity,InterfazSeleccionProducto contex, ArrayList<ItemFilaProducto> items,String tipo) {
        this.activity = activity;
        this.items = items;
        this.tipo = tipo;
        this.contex=contex;
      }

  public int getCount() {
    return items.size();
  }

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

  public long getItemId(int position) {
    return items.get(position).getId();
  }
  public String getItemProducto(int position) {
        return items.get(position).getProducto();
      }
  public String getItemCantidad(int position) {
        return items.get(position).getCantidad();
      }
  public String getItemPercio(int position) {
        return items.get(position).getPrecio();
      }
  public EditText getItemEdit(int position) {
        return items.get(position).getEditTxt();
      }

  public View getView(int position, View convertView, ViewGroup parent) 
  {
    db = new BaseDataAdapter(activity);

    View vi=convertView;
    final ItemFilaProducto item = items.get(position);

    if(convertView == null) 
    {
              LayoutInflater inflater = (LayoutInflater)   activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
              vi = inflater.inflate(R.layout.list_producto, null);
    }  

       btnImDerecha = (ImageButton) vi.findViewById(R.id.BtnDerechaVenta);
       btnImIzquierda = (ImageButton) vi.findViewById(R.id.BtnIzquierdaVenta);
       TextView producto = (TextView) vi.findViewById(R.id.txtProductoVenta);
       item.precio = (TextView) vi.findViewById(R.id.txtCantidadVenta);
       item.edtxt = (EditText) vi.findViewById(R.id.editTxtListVenta);
       producto.setText(item.getProducto());
       Log.i("Precio",item.montoPrecio);
       if(item.cantidad.equalsIgnoreCase("0")){
           item.precio .setText(item.Precio);
       }else 
           item.precio .setText(item.montoPrecio);

       item.edtxt.setText(""+item.cantidad);

       btnImDerecha.setOnClickListener(new OnClickListener() {

             @Override
                public void onClick(View v) {
                    int i = Integer.parseInt(item.edtxt.getText().toString());
                    i=i+1;
                    item.edtxt.setText(""+i);

             }
            });
       btnImIzquierda.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    int i = Integer.parseInt(item.edtxt.getText().toString());
                      if(0<i){
                        i=i-1;
                        item.edtxt.setText(""+i);
                        }
             }
            });
               item.edtxt.addTextChangedListener(new TextWatcher() {
               public void afterTextChanged(Editable s)
               { 

               }
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {


            }
            public void onTextChanged(CharSequence s, int start, int before, int count) { 
                db.open();
                Cursor cur = db.obtenerProductosTipo(tipo,item.getIdPro());
                if(cur.moveToFirst()){
                    int precio = cur.getInt(3);
                    int cantidad = Integer.parseInt(item.edtxt.getText().toString());
                    int monto = precio*cantidad;
                    if(0 < monto){
                        item.setPrecio(msk.mascaraMontoTxt(String.valueOf(monto)));
                        item.precio .setText(item.getPrecio());
                    }
                    db.actualizarProductoMonto(item.getIdPro(),monto);
                    db.actualizarProductoCantidad(item.getIdPro(),cantidad);
                }
                cur.close();
                int montoTotal = 0;
                Cursor curAll = db.obtenerProductosTipo(tipo);
                if(curAll.moveToFirst()){

                    do{
                        montoTotal = montoTotal + curAll.getInt(5);
                        Log.e("CANTIDAD", ""+curAll.getInt(5));
                    }while(curAll.moveToNext());
                    }

                curAll.close();
                try{
                    db.borrarTablaPar("MONTO");
                }catch(Exception e){

                }
                Log.e("MONTO", ""+montoTotal);
                DtoParametro dtoParametro = new DtoParametro();
                dtoParametro.ID_PAR = "MONTO";
                dtoParametro.VALOR = String.valueOf(montoTotal);
                Log.i("MONTO",""+String.valueOf(montoTotal));
                db.insertarParametro(dtoParametro);
                db.close();
                contex.mostrarMonto();          
            }
            });
    return vi;
  }

}

1 个答案:

答案 0 :(得分:0)

ListViews重用它们的行,因此您需要跟踪哪些EditTexts包含哪些内容,并在ListView滚动时恢复它们。只需在适配器中创建一个新的List<String>,我将其称为userStrings,以便使用以下内容恢复相应的值:

item.edtext.setText(userStrings.get(position));

并将这些值存储在onTextChanged()或当EditText失去焦点时。

虽然我注意到你的当前适配器可以通过使用ViewHolders并在新布局膨胀时初始化代码来加快。在Turbo-Charge Your UIWorld of LiistView等各种Google I / O会谈中详细讨论了这一点。