Java 筛选后无法显示listview数据
我有一个listview适配器过滤器,它使用like语句正确过滤输入的文本 我遇到的问题是,当我的应用程序加载时,所有数据都显示在listview中。当应用过滤器时,它会正确地过滤到supplid文本,我不能做的是,一旦edittext再次为空(即删除搜索字符串),所有数据都会在listview中重新显示。 以下屏幕截图显示了该问题: 已加载列表: 过滤文本“a”。苹果按预期显示: 问题:删除“a”时,不会重新加载listview 过滤器的代码:Java 筛选后无法显示listview数据,java,android,Java,Android,我有一个listview适配器过滤器,它使用like语句正确过滤输入的文本 我遇到的问题是,当我的应用程序加载时,所有数据都显示在listview中。当应用过滤器时,它会正确地过滤到supplid文本,我不能做的是,一旦edittext再次为空(即删除搜索字符串),所有数据都会在listview中重新显示。 以下屏幕截图显示了该问题: 已加载列表: 过滤文本“a”。苹果按预期显示: 问题:删除“a”时,不会重新加载listview 过滤器的代码: itemNameEdit
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;
}
我注意到您正在使用:
if(constraintPassed == "" || constraintPassed.length() == 0)
决不能对字符串使用==
,必须使用equals()
但在这种情况下,您可以只使用
constraintPassed.length()==0
或:
if(constraintPassed.isEmpty())
(请阅读以了解
=
和equals()
之间的区别)添加游标适配器。notifyDataSetChanged()在on-textchange方法中刷新listview,在编辑文本时,您可能没有刷新listviewblank@Raghunandan我在textChanged方法中添加了DataSetChanged,并且遇到了相同的问题,即当edittext为空时,如何从过滤器中返回内容。当edittext为空时,显示整组原始值我觉得您的代码很好,所以我不确定发生了什么。但是永远不要这样做constraintPassed==”
始终使用equals()
,在这种情况下,isEmpty()
或length()==0
本身就可以了。