问题描述:
在使用Algolia android SDK实现即时搜索时,出现了当文本框中的查询文本更改时,搜索结果不会自动更新的问题。如下面的示例代码所示:
Searcher searcher = new Searcher.Builder(ALGOLIA_APP_ID, ALGOLIA_SEARCH_API_KEY, ALGOLIA_INDEX_NAME).build();
searcher.setQuery("initial query");
searcher.search();
...
//监听搜索结果的变化
searcher.setOnSearchListener(new Searcher.OnSearchListener() {
@Override
public void onResults( JSONObject content ) {
// process results data here
}
@Override
public void onError( AlgoliaException error ) {
// handle error here
}
});
...
//监听EditText的文本变化,并触发搜索
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
searcher.setQuery(s.toString());
// searcher.search(); //注释掉此行
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
〔
在上述代码中,即时搜索的实现存在一个问题,即在EditText的文本变化监听器中,将查询文本设置到Searcher中后,没有手动调用searcher.search()方法来触发新的搜索。因此,只有第一次搜索是由于调用search()方法触发的,后续的查询文本变化不会自动触发新的搜索。
解决这个问题可以通过两种方法来实现:
方法一: 在监听搜索结果变化的方法中,手动监听EditText文本的变化,并触发新的搜索。
具体实现代码如下:
//设置搜索监听器
searcher.setOnSearchListener(new Searcher.OnSearchListener() {
@Override
public void onResults( JSONObject content ) {
// process results data here
}
@Override
public void onError( AlgoliaException error ) {
// handle error here
}
});
// 设置EditText文本变化监听器
searchBox.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void
在上述代码中,即时搜索的实现存在一个问题,即在EditText的文本变化监听器中,将查询文本设置到Searcher中后,没有手动调用searcher.search()方法来触发新的搜索。因此,只有第一次搜索是由于调用search()方法触发的,后续的查询文本变化不会自动触发新的搜索。
解决这个问题可以通过两种方法来实现:
方法一:
在监听搜索结果变化的方法中,手动监听EditText文本的变化,并触发新的搜索。
具体实现代码如下:
//设置搜索监听器 searcher.setOnSearchListener(new Searcher.OnSearchListener() {
@Override
public void onResults( JSONObject content ) {
// process results data here
}
@Override
public void onError( AlgoliaException error ) {
// handle error here
}
});
// 设置EditText文本变化监听器 searchBox.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void