更改Edittext后更新Seekbar

时间:2015-02-24 15:24:34

标签: java android seekbar

所以我有一个搜索栏和一个edittext。我的目标是在edittext中输入一个数字,同时搜索栏应该跳转到相关位置。反之亦然。

我已经分别为他们准备了代码。但缺少一些东西。因为当我放入并开始时我可以滑动搜索条,并且值在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) {

    }

4 个答案:

答案 0 :(得分:1)

如您所见,有一个参数传递给" onProgressChanged"函数叫"来自用户":

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

它定义了进展由"物理"移动滑块,所以你需要做的只是键入如下:

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

它阻止了这种循环。

答案 1 :(得分:1)

问题在于您的afterTextChanged()方法。

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

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

<强>输出:

enter image description here

希望这会有所帮助〜

答案 2 :(得分:0)

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

首先调用此行,更改文本。

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

然后调用此行,将文本更改为其他内容。这两个setText()发生得太快了,你看不到它发生了两次,你只能看到最后一个的结果。

我建议您删除value.setText(value.getText().length());,如果我正确理解您的问题,则显示值字符串的长度不是您想要做的事情。

答案 3 :(得分:0)

value.setText(value.getText().length());不用于显示长度。用于将光标位置放置在edittext的末尾,而不是将光标移到开始位置

相关问题