【问题标题】:EditText in ListView Scrolling issue not getting resolvedListView 中的 EditText 滚动问题未得到解决
【发布时间】:2016-04-11 09:34:39
【问题描述】:

我有一个 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


【解决方案1】:

当您向下或向上滚动列表视图时,默认情况下,android 系统每次都会创建新行并销毁以前的行,因此您在滚动时会丢失数据。尝试将 edittext 的数据保存在 SharedPreferences 中,并将键作为行的位置,然后从 sharedpreferences 中检索数据。每次您必须在 getView() 方法的开头检查当前位置是否已保存在 sharedpreferences 中。如果 find 将该值设置为 edittext 否则不设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    相关资源
    最近更新 更多