我正在处理一个包含搜索栏的片段,如果使用了搜索栏值,则会在editText元素中更新。用户还可以通过在editText上输入值来更新搜索栏。(这一切都有效,直到我实现清除前一个值)
搜索栏默认为500(中点),textView显示500.随着搜索栏进度的变化,editText中的值与之匹配。 (这种作品)
当用户通过选择EditText元素输入新值时,我希望新输入的500(或任何值)消失。 (这有效)。
问题是:每当我在软键盘上输入一个新值并选择勾选时,新值就会清除,软键盘仍然保持不动,进度条或编辑文本不会更新。做错了什么?
SEEKBAR - 更新EditText
private int radius = 500;
//START SEEKBAR DISTANCE
distControl=(SeekBar)view.findViewById(R.id.sb_loc_dist_set);
txtInMaxMiles=(EditText)view.findViewById(R.id.txt_max_num_input);
distControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener()
{
int progressChange = 0;
@Override
public void onProgressChanged (SeekBar seekBar,int progress, boolean fromUser){
radius = progress;
txtInMaxMiles.setText(String.valueOf(radius));
}
@Override
public void onStartTrackingTouch (SeekBar seekBar){
distControl.setProgress(radius);
}
@Override
public void onStopTrackingTouch (SeekBar seekBar){
txtInMaxMiles.setText(String.valueOf(radius));
}});//END: SEEK BAR DISTANCE
修改文字 - 更新进度条
txtInMaxMiles.addTextChangedListener(new TextWatcher() {
String txtIn;
@Override //Before screen fully loads
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// txtIn = txtInMaxMiles.getText().toString();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
txtIn = txtInMaxMiles.getText().toString();
}
@Override
public void afterTextChanged(Editable s) {
txtIn = txtInMaxMiles.getText().toString();
if (txtIn == null || txtIn.trim().equals("")) {
radius = 0;
}
if (radius < 1 || radius > 1000) {
txtInMaxMiles.setError("Please input a number between 0 and 1001");
} else {
txtInMaxMiles.setError(null);
distControl.setProgress(Integer.parseInt(s.toString()));
// txtInMaxMiles.setText(Integer.toString(radius));
}
}
});
点击EditText元素
txtInMaxMiles.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
txtInMaxMiles.setText("");
}
});
return view;
我认为这是一个quickfix,但我只是缺少一些东西,所以任何帮助将不胜感激。
答案 0 :(得分:0)
好的,管理好了。这次我没有硬编码半径(顽皮),使代码更清晰。然而即使这样做.... OnClickStill也没有工作。所以我尝试了另一种方法,当用户输入新值时,文本被突出显示并替换,这个线程非常有用:Select all text inside EditText when it gets focus 但是,我仍然尝试onClick ...并且它没有工作,即使它更近了一步。 最后Lukas Batteau在这个帖子中保存了这一天Android EditText onClickListener 而不是使用onClick我改为OnTouchListener。
txtInMaxMiles.setSelectAllOnFocus(true);
txtInMaxMiles.addTextChangedListener(new TextWatcher() {
int txtIn;
@Override //Before screen fully loads
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
txtInMaxMiles.clearFocus();
txtInMaxMiles.requestFocus();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
txtIn = Integer.parseInt(txtInMaxMiles.getText().toString());
if (txtInMaxMiles.getText().toString() == null || txtInMaxMiles.getText().toString().trim().equals("")) {
}
if (txtIn < 1 || txtIn > 1000) {
txtInMaxMiles.setError("Please input a number between 0 and 1001");
} else {
txtInMaxMiles.setError(null);
distControl.setProgress(Integer.parseInt(s.toString()));
}
}
});
txtInMaxMiles.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (MotionEvent.ACTION_UP == event.getAction()) {
txtInMaxMiles.clearFocus();
txtInMaxMiles.requestFocus();
}
return false; // return is important...
}
});
return view;
}
好的,所以我仍然是一个新手,所以任何明确的编码建议将不胜感激,如果有人知道onClickListener如何工作的原因请告诉我,因为我不知道为什么。