2013-03-05 38 views
0

我的滾動列表中的EditText出現問題,EditText的內容變得混亂,所以我閱讀它,因爲使用較少的內存將被重新分配ID。我已閱讀相同的查詢和有關此主題的答案,但我無法解決。EditText丟失內容來移動列表視圖

我會是你的幫助非常感謝,我的移動設備

新的編程這是我的代碼:

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; 
    } 

}

+0

你能解釋一下更像是什麼實際問題,以及你面對的代碼的哪一部分? – 2013-03-05 17:44:28

回答

0

列表視圖重用他們的行,所以你需要跟蹤哪些EditTexts包含什麼並將它們恢復爲ListView滾動。只需創建在適配器中新List<String>,我把它叫做userStrings,恢復適當的值使用:

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

而在onTextChanged()這些值存儲或當的EditText失去焦點。

雖然我注意到只有當新的佈局被誇大時,你可以通過使用ViewHolders和初始化你的代碼來加速你的當前適配器。這在各種Google I/O會談中詳細討論,如Turbo-Charge Your UIWorld of LiistView

+0

但我有一個ArrayList 項目,然後我聲明像最終ItemFilaProducto item = items.get(position); – user2136722 2013-03-05 17:36:12

+0

和item.edtxt.getText()。toString(); – user2136722 2013-03-05 17:36:51

+0

'items'是否存儲用戶的文本,如果它確實在這個代碼的位置? – Sam 2013-03-05 17:49:19