所以我设置了SimpleAdapter
,我想在其上方添加editText
,您可以输入搜索查询并实时更新列表。
我知道我已经可以setTextFilterEnabled(true)
并强制键盘弹出。当你按下editText
并完成它时我就会这样做。
我遇到的问题是,当你搜索时弹出字母的盒子实在是太丑了。它占据了屏幕的1/4,覆盖了搜索结果。有没有办法定制这个?在这种情况下,是否可以使用editText
作为simpleAdapter
,以便我可以完全删除该框?
答案 0 :(得分:0)
您必须使用addTextChangedListener
添加TextWatcher
。
Boolean[] isPresent;
ed = (EditText) findViewById(R.id.editText1);
ed.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
textLength = ed.getText().length();
list.clear();
isPresent = initIsPresentArray();
for (int i = 0; i < tempList.length; i++) {
for (int j = 0; j < (tempList[i].length() - (textLength - 1)); j++) {
if (textLength <= tempList[i].length()) {
if (isPresent[i] == false) {
if (ed.getText()
.toString()
.equalsIgnoreCase(
(String) tempList[i]
.subSequence(
j,
(j + textLength)))) {
list.add(tempCaseList.get(i));
isPresent[i] = true;
}
}
}
}
if (list.size() == 0) {
error.setText(getResources().getString(R.string.notFound));
} else {
error.setText("");
}
lv.setAdapter(new CustomAdapter(History.this, list));
}
}
});
方法initIsPresentArray()
public Boolean[] initIsPresentArray() {
Boolean[] isPresent = new Boolean[tempCaseList.size()];
for (int i = 0; i < isPresent.length; i++) {
isPresent[i] = false;
}
return isPresent;
}
正如您所看到的,我不直接对包含该信息的ArrayList
进行操作,但我使用此方法将此ArrayList
复制到临时ArrayList
public ArrayList<Case> createTempList(ArrayList<Case> listOfCases) {
ArrayList<Case> temporaryList = new ArrayList<Case>();
for (Case c : listOfCases) {
temporaryList.add(c);
}
return temporaryList;
}
如果有些事情未清除,请添加评论!
答案 1 :(得分:0)
虽然托比亚斯的回答很有见地,但它没有回答我的问题,而且我需要做的事情相当复杂。我没有每次都清理并重新加载列表,而是选择在阵列适配器中使用一个自动执行所有操作的过滤器:
This is the article帮助我做到了,它非常有用。