我的布局中有TextView和EditText。 TextView表示价格,EditText表示数量。当用户在EditText中输入一些数字时,我想将价格乘以输入的数字并将其显示在我的TextView上。但是我无法实现这一点。下面是我的源代码。
mEditTextQuantity = (EditText) rootView.findViewById(R.id.quantity_edit_text);
mEditTextQuantity.setFilters(new InputFilter[]
{ new Ipfilters("1", "999") });
mEditTextQuantity.setText("1");
int position = mEditTextQuantity.length();
Editable etext = mEditTextQuantity.getText();
Selection.setSelection(etext, position);
Utility.showKeypad(mEditTextQuantity, getActivity());
mEditTextQuantity.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
mEditTextQuantity.requestFocus();
Utility.showKeypad(mEditTextQuantity, getActivity());
int mtemp;
mtemp=Integer.parseInt(mEditTextQuantity.getText().toString().trim());
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
double price = Double.parseDouble(mProductPriceTextView.getTag().toString());
price = price * mtemp;
mProductPriceTextView.setText(mCurrency + nf.format(price));
return true;
}
});
我也明白我们可以通过编辑文本的onKeyPreIme方法来实现它,但不能这样做。 提前谢谢。
答案 0 :(得分:2)
为什么不尝试使用here所述的textChangedListener
?您可以在更改之前和之后查看文本内容,并根据结果修改TextView
。
答案 1 :(得分:1)
你可能正在寻找......
edtText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
int newPrice = price*Integer.parseInt(edtText.getText().toString());
mProductPriceTextView.setText(""+newPrice);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
答案 2 :(得分:0)
第一个建议:不要使用OnTouchListener
;它将响应与编辑文本交互的任何和所有触摸事件。
我没有立即在代码中看到任何会失败的内容,但可能会看到它是否可以使用不同的触发器。此代码应响应用户点击“完成”或“输入”键。
mEditTextQuantity.setOnEditorActionListener(new OnEditorActionListener(){
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event){
if(actionId == EditorInfo.IME_ACTION_DONE || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){
int mtemp;
mtemp=Integer.parseInt(mEditTextQuantity.getText().toString().trim());
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
double price = Double.parseDouble(mProductPriceTextView.getTag().toString());
price = price * mtemp;
mProductPriceTextView.setText(mCurrency + nf.format(price));
return true;
}
else
return false;
}//onEditorAction()
}
为了更好地了解您正在寻找的内容,您能提供任何错误日志或任何可能告诉我们出现问题的内容吗?