2015-02-24 112 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

希望这将有助于〜