2016-04-11 13 views
0

私はそれに4つのEditTextを持つListViewを持っています。私はそれらのフィールドにいくつかのテキストを入力し、スクロールすると、私はデータを失った。私は多くの例を試しましたが、何も私のために働いていません。助けてください。ListViewのEditText解決されないスクロールの問題

public NewOrderTotalCountAdapter(Context context, int resource, 
     List<Object> objList) { 
    super(context, resource, objList); 
    this.context = context; 
    this.resourceId = resource; 
    this.objArrayList = objList; 
    Log.i("Size============", String.valueOf(objList.size())); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View totalView = convertView; 
    TotalCountHolder totalCountHolder; 
    if (totalView == null) { 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     totalView = inflater.inflate(resourceId, parent, false); 

     totalCountHolder = new TotalCountHolder(); 
     totalCountHolder.productsNameView = (EditText) totalView 
       .findViewById(R.id.productName); 
     totalCountHolder.productQuantityView = (EditText) totalView 
       .findViewById(R.id.quantity); 
     totalCountHolder.productUnitPriceView = (EditText) totalView 
       .findViewById(R.id.unitPrice); 
     totalCountHolder.productTotalPriceView = (EditText) totalView 
       .findViewById(R.id.totalPrice); 
     totalCountHolder.btnDel = (Button) totalView 
       .findViewById(R.id.btnDel); 
     totalCountHolder.productsNameView 
     .addTextChangedListener(new TextWatchers(
     totalCountHolder.productsNameView, position)); 
     totalCountHolder.productQuantityView 
     .addTextChangedListener(new TextWatchers(
     totalCountHolder.productQuantityView, position)); 
     totalCountHolder.productUnitPriceView 
     .addTextChangedListener(new TextWatchers(
     totalCountHolder.productUnitPriceView, position)); 
     totalCountHolder.productTotalPriceView 
     .addTextChangedListener(new TextWatchers(
     totalCountHolder.productTotalPriceView, position)); 

     totalCountHolder.btnDel.setTag(position); 
     totalCountHolder.btnDel.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Integer index = (Integer) v.getTag(); 

       objArrayList.remove(index.intValue()); 
       notifyDataSetChanged(); 
      } 
     }); 
     totalView.setTag(totalCountHolder); 

    } else { 
     totalCountHolder = (TotalCountHolder) totalView.getTag(); 
    } 
    try { 

     if (objArrayList != null) { 
      if (position < objArrayList.size()) { 
       ProductsEntity productEntity = (ProductsEntity) objArrayList 
         .get(position); 
       String productName = productEntity.getProcdut_name(); 
       String quantity = productEntity.getQuantity(); 
       String unitPrice = productEntity.getUnit_price(); 
       String total_price = productEntity.getTotal_price(); 
       totalCountHolder.productsNameView.setText(productName); 
       totalCountHolder.productQuantityView.setText(quantity); 
       totalCountHolder.productUnitPriceView.setText(unitPrice); 
       totalCountHolder.productTotalPriceView.setText(total_price); 
       totalCountHolder.btnDel.setVisibility(View.VISIBLE); 

      } else { 

      totalCountHolder.productsNameView.setText(""); 
      totalCountHolder.productQuantityView.setText(""); 
      totalCountHolder.productUnitPriceView.setText(""); 

      totalCountHolder.productTotalPriceView.setText(""); 
       totalCountHolder.btnDel.setVisibility(View.GONE); 
      } 

     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return totalView; 
} 

@Override 
public int getCount() { 
    int i = objArrayList.size(); 
    int j = i + 2; 
    return objArrayList != null ? j : 0; 

} 

private class TotalCountHolder { 
    EditText productsNameView; 
    EditText productQuantityView; 
    EditText productUnitPriceView; 
    EditText productTotalPriceView; 
    Button btnDel; 
} 

class TextWatchers implements TextWatcher { 
    View view; 
    int position; 

    TextWatchers(View view, int position) { 
     this.view = view; 
     this.position = position; 

    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, 
      int count) { 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 

     EditText et = (EditText) view; 

     if (view.getId() == R.id.productName) { 
      ProductsEntity productEntity = (ProductsEntity) objArrayList 
        .get(position); 
      String name = et.getText().toString().trim(); 
      productEntity.setProcdut_name(name); 
      //objArrayList.set(position, productEntity); 
      Log.i("Name====", name); 
      Log.i("Product Entity====", productEntity.toString()); 
      return; 

     } 
     if (view.getId() == R.id.quantity) { 
      ProductsEntity productEntity = (ProductsEntity) objArrayList 
        .get(position); 
      String name = et.getText().toString().trim(); 
      productEntity.setQuantity(name); 
      //objArrayList.set(position, productEntity); 
      Log.i("Name====", name); 
      Log.i("Product Entity====", productEntity.toString()); 
      return; 

     } 
     if (view.getId() == R.id.unitPrice) { 
      ProductsEntity productEntity = (ProductsEntity) objArrayList 
        .get(position); 
      String name = et.getText().toString().trim(); 
      productEntity.setUnit_price(name); 
      //objArrayList.set(position, productEntity); 
      Log.i("Name====", name); 
      Log.i("Product Entity====", productEntity.toString()); 
      return; 

     } 
     if (view.getId() == R.id.totalPrice) { 
      ProductsEntity productEntity = (ProductsEntity) objArrayList 
        .get(position); 
      String name = et.getText().toString().trim(); 
      productEntity.setTotal_price(name); 
      //objArrayList.set(position, productEntity); 
      Log.i("Name====", name); 
      Log.i("Product Entity====", productEntity.toString()); 
      return; 

     } 

    } 

} 

あなたは下にスクロールするか、デフォルトのAndroidシステムのたびに新しい行を作成し、このための前の行を破壊することにより、あなたはスクロールするとリストビューまで、あなたのデータを失った場合にはこれが私のアダプタクラス

+0

このリンクを参照してください。http://stackoverflow.com/questions/35967787/edittext-in-listview-gets-duplicated –

答えて

0

です。行の位置としてkeyを持つSharedPreferencesにedittextのデータを保存し、後でsharedpreferencesからデータを取得してみてください。 getView()メソッドの先頭で、現在の位置がsharedpreferencesにすでに保存されているかどうかをチェックする必要があるたびに、見つかった場合は、その値をedittextに設定します。

関連する問題