0

I have a ListView with four EditText in it. When i entered some text in those fields and scroll, i lost the data. I have tried so many examples but nothing worked for me.Please help.

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;

        }

    }

}

This is my Adapter class

swayam swayam
  • 131
  • 1
  • 12

1 Answers1

0

When you scroll down or up the listview, by default android system everytime creates new row and destroy the previous rows because of this you lost your data when you scroll. Try to save the data of edittext in SharedPreferences with key as position of row and later retrieve the data from sharedpreferences. Every time you have to check in the beginning of getView() method that current position is saved already in sharedpreferences or not. If find set that value to edittext otherwise not.

Ameer Faisal
  • 355
  • 1
  • 9