如何正确使用android的编辑文本更改侦听器?我知道对于某些人来说这听起来有点容易,但我对这个问题感到困惑。我曾经在应用程序中编辑有关我的搜索功能的文本更改侦听器。然后我使用了一个过滤器,以根据用户输入的内容进行过滤。例如,用户类型ka和karl,kamille将被建议到列表中。首先,我将recyclerview可见性设置为false,以便在启动时不会显示recyclerview,并且仅当edittext不为null或我应该说用户已经在输入时,它才可见。我已经做过,如果用户键入任何单个字符,则recyclerview将变为可见,但之后便保持不变。我想如果编辑文本为null,则recyclerview将再次变得不可见。
这是我应用程序中有关编辑文本更改侦听器的代码。
<p>test content<img src="/img/image_100.jpeg" width="1200" height="900" /></p>
不正确吗?还是我错过了什么?
答案 0 :(得分:1)
它保持可见,因为在该调用中searchusersedittext
总是非空的(如果为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);
}
}
答案 1 :(得分: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();
}
}};