以下for
循环会根据项目的大小添加x
行数:
for (int i = 0; i < shoppingQuantityAndItems.size(); i++) {
TableRow label = new TableRow(this);
EditText quantity = new EditText(this);
quantity.setInputType(InputType.TYPE_CLASS_NUMBER);
quantity.setText(shoppingQuantityAndItems.get(i).get(0));
System.out.println("Size: "
+ shoppingQuantityAndItems.get(i).get(0));
label.addView(quantity);
TextView items = new TextView(this);
items.setText(shoppingQuantityAndItems.get(i).get(1));
System.out.println("Item: "
+ shoppingQuantityAndItems.get(i).get(1));
label.addView(items);
price = new EditText(this);
price.setId(i);
price.setInputType(InputType.TYPE_CLASS_NUMBER
| InputType.TYPE_NUMBER_FLAG_DECIMAL);
price.setText("");
label.addView(price);
updatePrice(price.getId());
CheckBox ch = new CheckBox(this);
ch.setChecked(false);
label.addView(ch);
table.addView(label);
}
因为我希望每个不同价格EditText
字段在用户输入时具有不同的值,所以我使用其唯一ID调用方法:
public void updatePrice(int id){
updatedPrice = (EditText) price.findViewById(id);
updatedPrice.addTextChangedListener(new TextWatcher() {
private String current = "";
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!s.toString().equals(current)) {
updatedPrice.removeTextChangedListener(this);
String cleanString = s.toString().replaceAll("[£,.]", "");
double parsed = Double.parseDouble(cleanString);
String formated = NumberFormat.getCurrencyInstance()
.format((parsed/100));
current = formated;
updatedPrice.setText(formated);
updatedPrice.setSelection(formated.length());
updatedPrice.addTextChangedListener(this);
}
}
我只是想知道是否有人可以告诉我如何确保在任何这些文本字段中输入数字时,只有该值会发生变化,而不是其他值。
答案 0 :(得分:0)
您使用了错误的EditText
小部件。
updatedPrice
可能是您班级的数据成员。这不是一个好主意,因为您没有这些EditText
小部件中的一个。
此外,您的onTextChanged()
会假定updatedPrice
将指向正确的EditText
窗口小部件 - 用户恰好输入的窗口小部件 - 并且在统计上不太可能。< / p>
假设代码的其余部分实际上是您想要的,那么您需要更改:
updatedPrice = (EditText) price.findViewById(id);
是:
final EditText updatedPrice = (EditText) price.findViewById(id);
这会导致TextWatcher
匿名内部类使用您在updatedPrice
电话时检索的updatePrice()
,而不是您在EditText
电话中使用的TextWatcher
该类的数据成员。
或者,您可以findViewById()
执行updatedPrice
本身。无论哪种方式都应该有效。
我建议您删除{{1}}数据成员并修复其余代码,因为您可能有其他类似的错误。