我有一个 listview 适配器过滤器,它使用 like 语句正确过滤我输入的文本。
我遇到的问题是,当我的应用程序加载时,所有数据都显示在列表视图中。当应用过滤器时,它会正确过滤到提供的文本,我不能做的是,一旦编辑文本再次为空白(即搜索字符串被删除),所有数据都会重新显示在列表视图中。
以下屏幕截图显示了该问题:
加载列表:
过滤文本“a”。苹果按预期显示:
问题:删除“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;
}