2014-03-04 69 views
0

我正在開發一個BMI計算器,並且我添加了一個可選的SeekBar來更改edittext中的值。當我移動seekbar時,edittext中的值是不同的,但是當我從edittext中更改seekbar時,seekbar不會更新。使用EditText更新SeekBar

可能osmeone explcain我該怎麼做?我遇到的getText

public class MainActivity extends Activity { 
private RadioGroup rgsexo; 
EditText editPeso; 
EditText editAltura; 
TextView imcView; 
SeekBar alterarAltura; 
SeekBar alterarPeso; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    editPeso = (EditText)findViewById(R.id.editPeso); 
    editAltura = (EditText)findViewById(R.id.editAltura); 
    imcView = (TextView)findViewById(R.id.imcView); 
    alterarAltura = (SeekBar)findViewById(R.id.alterarAltura); 
    alterarPeso = (SeekBar)findViewById(R.id.alterarPeso); 
    alterarAltura.setOnSeekBarChangeListener(alteraralturaListener); 
    alterarPeso.setOnSeekBarChangeListener(alterarpesoListener); 
    //This is where i'm having troubles 
    editAltura.addTextChangedListener(new TextWatcher(){ 
     public void afterTextChanged(Editable s) { 
      double setAltura = (editAltura.getText.toString()) * .01d; 
      alterarAltura.setProgress(String.format("%.02f", setAltura).replace(',', '.')); 
     } 
     public void beforeTextChanged(CharSequence s, int start, int count, int after){} 
     public void onTextChanged(CharSequence s, int start, int before, int count){} 
    }); 
} 

private OnSeekBarChangeListener alteraralturaListener = new OnSeekBarChangeListener() { 

    @Override 
    public void onProgressChanged(SeekBar seekBar, int progress, 
    boolean fromUser) { 
     // TODO Auto-generated method stub 

     double setAltura = (alterarAltura.getProgress()) * .01d; 
     // mostra na caixa o valor novo 
     editAltura.setText(String.format("%.02f", setAltura).replace(',', '.')); 
    } 

    @Override 
    public void onStopTrackingTouch(SeekBar seekBar) { 

    } 

    @Override 
    public void onStartTrackingTouch(SeekBar seekBar) { 

    } 
}; 

回答

2

你已經使用雙向功能的問題,SetProgress會影響這兩個功能我執行的這個節目,我已經在這個項目改變了小的修改...

你只需輸入文本,它會自動改變搜索欄.......

而且你必須設置Seek欄的最大值,那麼只有你可以改變Seek欄的進度......所有最好的...

public class MainActivity extends Activity { 
private EditText mTextEditer; 
private SeekBar mSeekBar; 
public float mProgressText; 
public int mProgressValue; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mTextEditer = (EditText) findViewById(R.id.textEditer); 
    mSeekBar = (SeekBar) findViewById(R.id.seekBar); 
    mSeekBar.setMax(100); 
    mTextEditer.addTextChangedListener(new watcher()); 
    mSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 
     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 

     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, 
       boolean fromUser) { 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

public class watcher implements TextWatcher { 

    @Override 
    public void afterTextChanged(Editable s) { 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, 
      int count) { 
     try { 
      if (s != null) { 
       mProgressText = Float.parseFloat(s.toString()); 
       mProgressValue = (int) mProgressText; 
       mSeekBar.setProgress(mProgressValue); 
      } 
     } catch (Exception exception) { 
      mSeekBar.setProgress(0); 
      exception.printStackTrace(); 
     } 
    } 

} 

}