以前的EditText值按要求清除,但不允许新用户输入

时间:2016-05-06 17:21:13

标签: android-fragments android-edittext user-input

我正在处理一个包含搜索栏的片段,如果使用了搜索栏值,则会在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,但我只是缺少一些东西,所以任何帮助将不胜感激。

1 个答案:

答案 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如何工作的原因请告诉我,因为我不知道为什么。