EditText上的Android格式编号,原因是

时间:2016-08-22 08:14:02

标签: android

当我尝试在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。

1 个答案:

答案 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) {

            }
        });
    }
}

每次文本更改时都避免声明新对象,是不必要的内存浪费。希望它有所帮助!