2016-06-30 19 views
0

Ich stehe vor einem Problem, wenn ich versuche, EditText mit der Seekbar und umgekehrt anzupassen. Wenn ich meine Suchleiste mit dem Mindestwert = 0 beginne, funktioniert es perfekt. Aber wenn ich den Mindestwert ändern, funktioniert es nicht! Kann mir bitte jemand helfen?Fehler bei der SeekBar/EditText-Integration

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()); 
      } 
     } 
    }); 
} 

Vielen Dank!

+0

Was ist die genaue Anforderung ?? – sJy

+0

Ich möchte eine seekBar, wenn ich es verschiebe, ändert sich der Wert edittext, und umgekehrt. –

Antwort

0

Aktualisierter Code, der für Seekbar Drag funktioniert.

Versuchen

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

Danke für Ihre Antwort @sJy, aber der Code zeigt nicht 200 - 1000, es erscheint 0 - 800 ... Irgendeine Idee, das zu lösen? –

+0

Sie brauchen min Wert von Seekbar zu 200 & max zu 1000 sein? – sJy

+0

Ja, genau ... –