如何在android中正确使用编辑文本更改监听器?

问题描述 投票:0回答:2

如何正确使用android的编辑文本更改监听器?我知道对于某些人来说这听起来有点容易,但我对这个问题感到困惑。我曾经在应用程序中编辑有关我的搜索功能的文本更改侦听器。然后我使用了一个过滤器,以根据用户输入的内容进行过滤。例如,用户类型ka和karl,kamille将被建议到列表中。首先,我将recyclerview可见性设置为false,以便在启动时不会显示recyclerview,并且仅当edittext不为null或我应该说用户已经在输入时,它才可见。我已经做过,如果用户键入任何单个字符,则recyclerview将变为可见,但之后便保持不变。我想如果编辑文本为null,则recyclerview将再次变得不可见。

这是我的应用程序中有关编辑文本更改侦听器的代码。

   searchusersedittext.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int 
      count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, 
      int count) {
                       }

        @Override
        public void afterTextChanged(Editable s) {
            if(searchusersedittext!=null) {
                recyclerViews.setVisibility(View.VISIBLE);


                filter(s.toString());
            }
            else if(searchusersedittext.equals("")){
                recyclerViews.setVisibility(View.INVISIBLE);
            }
            else if(searchusersedittext==null){
                recyclerViews.setVisibility(View.INVISIBLE);
            }
            else{
                recyclerViews.setVisibility(View.INVISIBLE);
            }




        }
    });

不正确吗?还是我错过了什么?

java android android-edittext
2个回答
2
投票

它保持可见,因为在该调用中searchusersedittext总是非空的(如果为null,则对searchusersedittext.addTextChangedListener的较早调用将失败,并带有NullPointerException),因此,一旦键入任何内容,它只会进入每次都是第一种情况(保持可见)。

searchusersedittext.equals("")也不检查EditText中是否为空条目,因为searchusersedittext是EditText对象,而不是输入的字符串。即使没有输入任何文本,EditText对象仍然存在。


0
投票
private Timer timer;

    TextWatcher searchTextWatcher = new TextWatcher() {
    @Override
    public void afterTextChanged(Editable arg0) {
        timer = new Timer();

        timer.schedule(new TimerTask() {

            @Override
            public void run() {
               // do your actual work here
            }
        }, 600); 
    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

        if (timer != null) {
            timer.cancel();
        }
    }};
© www.soinside.com 2019 - 2024. All rights reserved.