2016-03-08 3 views
0

У меня есть SeekBar и EditText.I хотел бы создать ползунок%, который, когда пользователь скользит по Seekbar, настраивает поле EditText.Настроить EditText с помощью Seekbar

я попытался это:

mInterestRateEditText.addTextChangedListener(new TextWatcher() { 
    public void afterTextChanged(Editable s) { 
    int i = Integer.parseInt(s.toString()); 
    if (i >= 0 && i <= 100) { 
     mInterestRateSeekBar.setProgress(50); 
    } 
    } 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

    public void onTextChanged(CharSequence s, int start, int before, int count) {} 
}); 

mInterestRateSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
    @Override 
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
    mInterestRateEditText.setText(progress + ""); 
    } 

    @Override 
    public void onStartTrackingTouch(SeekBar seekBar) { 

    } 

    @Override 
    public void onStopTrackingTouch(SeekBar seekBar) { 

    } 
}); 

, но все это делает это второй я стараюсь сдвинув ползунок, он блокирует EditText до 0, и я не могу переместить ползунок?

+0

Вы создаете цикл. Как только вы соскользнете, вы установите новый текст. Таким образом, текст изменяется и после того, как вызывается TextChanged. Затем прогресс поисковой строки снова изменяется, что меняет текст, который меняет форму поиска, которая ... вы знаете. – AlbAtNf

+0

lol спасибо !!! исправил это после того, как вы это сказали! – x10sion

ответ

1

Как я уже сказал в своем комментарии, вы создаете цикл. Изменив текст поиска, измените текст. Это снова изменит форму поиска.

Простое решение: работа с булевым.

 boolean changedProgrammatically; 

    mInterestRateEditText.addTextChangedListener(new TextWatcher() { 
     public void afterTextChanged(Editable s) { 
     int i = Integer.parseInt(s.toString()); 
    if(!changedProgrammatically){ 
     if (i >= 0 && i <= 100) { 
      mInterestRateSeekBar.setProgress(50); 
     } 

    }else{ 
changedProgrammatically = false; 
} 
     } 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 

     public void onTextChanged(CharSequence s, int start, int before, int count) {} 
    }); 

    mInterestRateSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
    changedProgrammatically = true; 
     mInterestRateEditText.setText(progress + ""); 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 

     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 

     } 
    }); 
Смежные вопросы