2016-06-30 7 views
0

SeekbarでEditTextを調整しようとすると問題が発生します。 シークバーを最小値= 0で起動すると、完全に動作します。 しかし、最小値を変更しても機能しません!誰でも助けてくれますか?SeekBar/EditTextインターラクションでエラーが発生する

private void bindElements(){ 
    final int SEEKBAR_SIZE_CORRECTION = 200; 
    final int SEEKBAR_MAX_SIZE = 1000; 
    // 10000 Change to object max value 
    int correctMax = SEEKBAR_MAX_SIZE - SEEKBAR_SIZE_CORRECTION; 


    mEtValue = (EditText) findViewById(R.id.et_value); 
    mEtValue.setFilters(new InputFilter[] { new InputFilter.LengthFilter(SEEKBAR_MAX_SIZE) }); 
    mEtValue.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) { 
      //3 is the length of SEEKBAR_SIZE_CORRECTION (2 0 0) 
      if (s.toString().length() == 3) { 
       //200 is the text of SEEKBAR_SIZE_CORRECTION 
       s = new SpannableStringBuilder("200"); 
      } 
      mSbValue.setProgress(Integer.parseInt(String.valueOf(s))); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
     } 
    });[![enter image description here][1]][1] 

    mSbValue = (SeekBar) findViewById(R.id.sb_value); 
    mSbValue.setMax(correctMax); 
    mSbValue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 

     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      progress += SEEKBAR_SIZE_CORRECTION; 
      if (mEtValue != null) { 
       mEtValue.setText(String.valueOf(progress)); 
       mEtValue.setSelection(mEtValue.getText().length()); 
      } 
     } 
    }); 
} 

ありがとうございます!

+0

を試してみてください? – sJy

+0

私はそれをスライドすると、edittextの値が変化し、その逆も同様です。 –

答えて

0

Seekbarドラッグで動作するコードが更新されました。

は、正確な要件は何

private void bindElements(){ 

    final int SEEKBAR_SIZE_CORRECTION = 200; 
    final int SEEKBAR_MAX_SIZE = 1000; 
    // 10000 Change to object max value 
    int correctMax = SEEKBAR_MAX_SIZE - SEEKBAR_SIZE_CORRECTION; 


    mEtValue = (EditText) findViewById(R.id.et_value); 
    mEtValue.setFilters(new InputFilter[] { new InputFilter.LengthFilter(SEEKBAR_MAX_SIZE) }); 
    mEtValue.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) { 
      try { 
       if(s.length() == 4) { 
        if(Integer.parseInt(s.toString()) > SEEKBAR_MAX_SIZE) { 
         s = s.subSequence(0,2); 
         changeText(s); 
        } 
       } else if(s.length() == 3) { 
        if(Integer.parseInt(s.toString()) < SEEKBAR_SIZE_CORRECTION) { 
         s = "" + (SEEKBAR_SIZE_CORRECTION + Integer.parseInt(s.toString())); 
         changeText(s); 
        } 
       } else if(s.length() < 3 && s.length() > 0) { 
        s = "" + (SEEKBAR_SIZE_CORRECTION+ Integer.parseInt(s.toString())); 
       } 

       if(s.length() != 0) 
        mSbValue.setProgress(Integer.parseInt(String.valueOf(Integer.parseInt(s.toString()) - SEEKBAR_SIZE_CORRECTION))); 
       else 
        mSbValue.setProgress(0); 
      } catch (NumberFormatException e) { 

      } 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
     } 
     void changeText(CharSequence s) { 
      mEtValue.setText(s); 
      mEtValue.setSelection(s.length()); 
     } 
    }); 

    mSbValue = (SeekBar) findViewById(R.id.sb_value); 
    mSbValue.setMax(correctMax); 
    mSbValue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 

     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      if (fromUser) { 
       mEtValue.setText(String.valueOf(progress + SEEKBAR_SIZE_CORRECTION)); 
       mEtValue.setSelection(mEtValue.getText().length()); 
      } 
     } 
    }); 
} 
+0

あなたの答えは@sJyありがとう、しかし、コードは200 - 1000を表示していない、それは0 - 800を表示しています...これを解決するための任意のアイデア? –

+0

Seekbarの最小値は200&maxにする必要がありますか? – sJy

+0

はい、まさに... –

関連する問題