为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

海绵宝宝撒 2021-05-21 18:06:23
如何正确使用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);            }        }    });不对吗 还是我错过了什么?
查看完整描述

2 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

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


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


尝试这样的事情:


@Override

public void afterTextChanged(Editable s) {

    String txt = searchusersedittext.getText().toString();

    // or String txt = s.toString();

    if( !txt.isEmpty() ) {

        recyclerViews.setVisibility(View.VISIBLE);

        filter(txt);

    }

    else {

        recyclerViews.setVisibility(View.INVISIBLE);

    }

}


查看完整回答
反对 回复 2021-05-26
?
开满天机

TA贡献1786条经验 获得超13个赞

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

        }

    }};


查看完整回答
反对 回复 2021-05-26
  • 2 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信