所以我有一个搜索栏和一个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) {
}
答案 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());
}
<强>输出:强>
希望这会有所帮助〜
答案 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的末尾,而不是将光标移到开始位置