2015-02-24 114 views
0

所以我有一個seekbar和一個edittext。我的目標是在edittext中輸入數字,同時seekbar應跳轉到相關位置。這也應該反過來。在更改Edittext後更新Seekbar

我已經得到了他們的代碼分開。但缺少一些東西。因爲當我放入並開始時,我可以滑動搜索欄,同時在edittext中更改值。但是當我嘗試輸入一個數字時,它跳到了開頭。例如:我想輸入123 ...結果是321.或多或少與刪除相同。 我認爲這兩個代碼是互相碰撞,我不知道該怎麼改變。

也許我應該說我是這個領域的新人。

我不知道如果我的願望是可以理解的..

這裏我的代碼: 1.

value.addTextChangedListener(new TextWatcher() { 


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

      } 

      @Override 
      public void onTextChanged(CharSequence s, int after, int before, int count) { 

      } 
      @Override 
      public void afterTextChanged(Editable s) { 
       try{ 
        //Update Seekbar value after entering a number 

        int progress = Math.round(Float.parseFloat(s.toString())); 
        seekbar.setProgress(progress); 
        value.setText(value.getText().length()); 
       } catch(Exception ex) {} 
      } 

      }); 

2.

@Override 
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
     value.setText(String.valueOf(progress)); 

    } 

    @Override 
    public void onStartTrackingTouch(SeekBar seekBar) { 

    } 

    @Override 
    public void onStopTrackingTouch(SeekBar seekBar) { 

    } 

回答

0
value.setText(value.getText().length()); 

這條線被稱爲首先,改變文字。

value.setText(String.valueOf(progress)); 

然後調用此行,將文本更改爲其他內容。這2 setText()發生得太快了,你看不到它發生了兩次,你只能看到最後一次的結果。

我建議你刪除value.setText(value.getText().length());,顯示值字符串的長度不是你想要做的事情,如果我正確理解你的問題。

1

正如你看到的,有傳遞到「onProgressChanged」功能被稱爲「FROMUSER」的參數:

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 

它定義了進展「物理」 shfting滑塊,因此,所有你需要做的改變,只是鍵入如下:

if (fromUser) value.setText(String.valueOf(progress)); 

它可以防止做這種循環。

1

問題出在您的afterTextChanged()方法中。

1.afterTextChanged()刪除行value.setText(value.getText().length());

value.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int after, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 

      try { 
       int progress = Math.round(Float.parseFloat(s.toString())); 
       seekBar.setProgress(progress); 

      } catch (Exception e) {} 
     } 
    }); 

2.更新onProgressChanged()方法如下,以移動cursor位置按text變化。

@Override 
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
    value.setText(String.valueOf(progress)); 
    value.setSelection(String.valueOf(progress).length()); 
} 

OUTPUT:

enter image description here

希望這將有助於〜