当我尝试在EditText上格式化输入的数字时,清除输入框的情况
formatter = new DecimalFormat("#,###,###");
transfer_amount.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
transfer_amount.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
String yourFormattedString = formatter
.format(Long.parseLong(charSequence.toString().replace(",", "")));
transfer_amount.setText(yourFormattedString);
finish_chosen_ewallets.setVisibility(View.GONE);
calculate.setBackground(context.getResources().getDrawable(R.drawable.selector_forms_button_actions));
chosen_ewallets_message.setText("");
}
@Override
public void afterTextChanged(Editable editable) {
}
});
和我的EditText布局:
<EditText
android:id="@+id/transfer_amount"
android:layout_width="match_parent"
android:layout_height="35dp"
android:paddingLeft="20dp"
android:textColor="#000"/>
LogCat上的完整堆栈错误:
java.lang.StackOverflowError
at android.view.ViewGroup.addFocusables(ViewGroup.java:878)
at android.view.View.addFocusables(View.java:6157)
at android.view.FocusFinder.findNextInputFocus(FocusFinder.java:100)
at android.view.FocusFinder.findNextFocus(FocusFinder.java:83)
at android.view.FocusFinder.findNextFocus(FocusFinder.java:65)
at android.view.ViewGroup.focusSearch(ViewGroup.java:639)
at android.view.View.focusSearch(View.java:6060)
at android.widget.TextView.onCreateInputConnection(TextView.java:5417)
at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:1048)
at android.view.inputmethod.InputMethodManager.restartInput(InputMethodManager.java:1002)
at android.widget.TextView.setText(TextView.java:3467)
at android.widget.TextView.setText(TextView.java:3405)
at android.widget.EditText.setText(EditText.java:80)
at android.widget.TextView.setText(TextView.java:3380)
at com.mahdi.androidapplication.mahdipaymentservice.UI.Activities.ActivityTransferMoney.ActivityTransferMoney$2.onTextChanged(ActivityTransferMoney.java:184)
at android.widget.TextView.sendOnTextChanged(TextView.java:7079)
at android.widget.TextView.setText(TextView.java:3550)
at android.widget.TextView.setText(TextView.java:3405)
at android.widget.EditText.setText(EditText.java:80)
at android.widget.TextView.setText(TextView.java:3380)
at com.mahdi.androidapplication.mahdipaymentservice.UI.Activities
我不知道真正的问题,我无法实现这个简单的fueate。
答案 0 :(得分:0)
嗨这对我有用:
public class exampleActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final EditText editText = new EditText(this);
final DecimalFormat formatter = new DecimalFormat("#,###,###");
editText.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
setContentView(editText);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String yourFormattedString = formatter
.format( Long.parseLong(s.toString().replace(",", "")));
Log.e("yourFormattedString ", yourFormattedString);
editText.setText(yourFormattedString);
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
}
每次文本更改时都避免声明新对象,是不必要的内存浪费。希望它有所帮助!