ListView中的EditText滚动问题未得到解决



我有一个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系统每次都会创建新行并销毁前几行,因此你在滚动时会丢失数据。尝试将edittext的数据保存在SharedPreferences中,键作为行的位置,然后从SharedPreferences检索数据。每次您必须在getView()方法的开头检查当前位置是否已保存在sharedpreferences中。如果find,则将该值设置为edittext,否则不设置。

最新更新