Clear EditText text after adding onTextChanged implemenation

后端 未结 5 677
孤街浪徒
孤街浪徒 2021-01-11 11:18

I\'m adding a listener to an EditText field to appropriately format the number to currency in real time.

        loanText.addTextChangedListener(new TextWatc         


        
相关标签:
5条回答
  • 2021-01-11 11:45

    I found this class that works great for me: http://www.java2s.com/Code/Android/UI/ConvertinputvaluetoCurrencyinTextWatcher.htm

    hope that will save you guys some time.

    0 讨论(0)
  • 2021-01-11 11:50

    The problem is that your TextWatcher sees that you are "clearing" the text, and therefore sends off a request to its callback methods(afterTextChanged, beforeTextChanged, etc).

    What i've done is to simply remove the TextWatcher, clear the text, and add the TextWatcherback to the EditText. That way, nothing is listening to my EditText changes.

    You will probably have to hold on to an instance of the TextWatcher instead of inlining it like you did. That way you don't have to create one every time you want to clear the EditText

    1. loanText.removeTextChangedListener(yourTextWatcherObject);
    2. loanText.setText("");
    3. loanText.addTextChangedListener(yourTextWatcherObject);
    0 讨论(0)
  • 2021-01-11 12:05

    Try to use afterTextChanged instead. I also had many problems with the other one.

    0 讨论(0)
  • 2021-01-11 12:05

    You can check whether Text is empty in onTextChanged as follows and do nothing if it is empty

    s.toString().isEmpty()

    public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(!s.toString().equals(current) && !s.toString().isEmpty()){
               String cleanString = s.toString().replaceAll("[$,.]", "");
    
               double parsed = Double.parseDouble(cleanString);
               String formated = NumberFormat.getCurrencyInstance().format((parsed/100));
    
               current = formated;
               loanText.setText(formated);
               loanText.setSelection(formated.length());
            }
        }
    
    0 讨论(0)
  • 2021-01-11 12:09
    public class MainActivity extends Activity {
    EditText et;
    TextWatcher tw;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        et=(EditText) findViewById(R.id.et);
    
         tw=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) {
            }
            @Override
            public void afterTextChanged(Editable s) {
                et.removeTextChangedListener(tw);
                et.setText(Math.random()+"");//add your logic here 
                et.addTextChangedListener(tw);
            }};
            et.addTextChangedListener(tw);
    }   
    

    } This is a Simple solution.

    0 讨论(0)
提交回复
热议问题