Java Can';在筛选后不要重置listview
我当前有一个列表视图,该视图填充在我的“onCreate”中。我有一个编辑文本,该文本通过传递给我的“onTextChanged”方法的约束进行过滤,然后将其发送到我的数据库处理程序类中的“getChanges”方法,并使用LIKE语句对其进行过滤。当我从编辑文本中删除字符串搜索时(即为空),我希望重新显示所有内容。目前我无法让它这样做,显示的数据只是显示最后过滤的数据 这是我的过滤器:Java Can';在筛选后不要重置listview,java,android,filter,Java,Android,Filter,我当前有一个列表视图,该视图填充在我的“onCreate”中。我有一个编辑文本,该文本通过传递给我的“onTextChanged”方法的约束进行过滤,然后将其发送到我的数据库处理程序类中的“getChanges”方法,并使用LIKE语句对其进行过滤。当我从编辑文本中删除字符串搜索时(即为空),我希望重新显示所有内容。目前我无法让它这样做,显示的数据只是显示最后过滤的数据 这是我的过滤器: searchName = (EditText) findViewById(R.id.inputNam
searchName = (EditText) findViewById(R.id.inputName);
searchedListResults.setTextFilterEnabled(true);
searchName.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 DBHandler(this, null, null);
cursorAdapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
getCons.open();
return getCons.getChanges(constraint.toString());
}
});
这是我的数据库处理程序类中的方法,起初我认为这是因为我在“IF”中关闭了游标,但这似乎起了作用
public Cursor getChanges(String constraintPassed) {
String [] columns = new String[]{KEY_ROWID, KEY_NAME, KEY_TEL, KEY_EMAIL, KEY_COMMENTS};
Cursor c = null;
if(constraintPassed == "" || constraintPassed.length() == 0)
{
c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, KEY_NAME + " ASC", null);
c.close();
}
else
{
c = ourDatabase.query(DATABASE_TABLE, columns, KEY_NAME + " LIKE'" + constraintPassed + "%'", null, null, null, KEY_NAME + " ASC", null);
}
if( c != null)
{
c.moveToFirst();
return c;
}
return null;
}
}
您应在过滤后使用:
((EfficientAdapter)listview.getAdapter()).notifyDataSetChanged();
其中,EfficientAdapter
是适配器类
希望这对您有用。尝试更换线路
cursorAdapter.getFilter().filter(s.toString());
与
在您的
onTextChanged
方法中。constraintPassed==“”
。Java 101,字符串比较关闭光标这一事实肯定没有帮助。如果这可以解决错误,那么错误将是编译错误,而不是运行时错误。
yourclassname.this.cursorAdapter.getFilter().filter(s.toString());