我有一个listview适配器过滤器,它使用like语句正确过滤我输入的文本。
我遇到的问题是,当我的应用加载时,所有数据都会显示在列表视图中。当应用过滤器时,它正确过滤到supplid文本,我无法做到这一点,以便一旦edittext再次为空(即删除搜索字符串),所有数据将在列表视图中重新显示。
以下屏幕截图显示了问题:
已加载列表:
过滤文字'a'。 Apple按预期展示:
问题:删除“a”后,不会重新加载列表视图。
过滤器代码:
itemNameEdit = (EditText) findViewById(R.id.inputName);
showItems.setTextFilterEnabled(true);
itemNameEdit.addTextChangedListener(new TextWatcher()
{
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
cursorAdapter.getFilter().filter(s.toString());
}
});
getCons = new DBHandlerShop (this, null, null);
cursorAdapter.setFilterQueryProvider(new FilterQueryProvider()
{
public Cursor runQuery(CharSequence constraint)
{
getCons.open();
return getCons.getChanges(constraint.toString());
}
});
showItems.setAdapter(cursorAdapter);
getChanges方法:
public Cursor getChanges(String constraintPassed) {
String [] columns = new String[]{KEY_ROWSHOPID, KEY_ITEMSHOP, KEY_ITEMNUM, KEY_ITEMPRICE};
Cursor c = null;
if(constraintPassed == "" || constraintPassed.length() == 0)
{
c = ourDatabase.query(DATABASE_TABLESHOP, columns, null, null, null, KEY_ITEMSHOP + " ASC", null);
}
else
{
c = ourDatabase.query(DATABASE_TABLESHOP, columns, KEY_ITEMSHOP + " LIKE'" + constraintPassed + "%'", null, null, null, KEY_ITEMSHOP + " ASC", null);
}
if( c != null)
{
c.moveToFirst();
//return c;
}
return c;
}
答案 0 :(得分:0)
我注意到你正在使用:
if(constraintPassed == "" || constraintPassed.length() == 0)
你永远不应该使用==
作为字符串,你必须使用equals()
但在这种情况下,您可以使用constraintPassed.length() == 0
或:
if(constraintPassed.isEmpty())
(请阅读How do I compare strings in Java?了解==
和equals()
之间的区别。)