0
我使用下面的代碼片段:FilterQueryProvider不工作
FilterQueryProvider provider = new FilterQueryProvider() {
@Override
public Cursor runQuery(CharSequence constraint) {
/* Uri uri = TextUtils.isEmpty(constraint) ? EmployeeContentProvider.URI_EMPLOYEES :
Uri.withAppendedPath(EmployeeContentProvider.URI_EMPLOYEES, constraint.toString()); */
return getContentResolver().query(EmployeeContentProvider.URI_EMPLOYEES, Employee.FIELDS, Employee.COL_NAME + " IS ?", new String[]{constraint.toString()}, null);
}
};
在上面,如果我使用Uri.withAppendedPath
並提供_id字段作爲搜索constriant,它工作正常。不過,我想根據名稱進行搜索。這裏不起作用。我的內容提供商如下:
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
Cursor result = null;
System.out.println("Selection: " + selection);
System.out.println("Selection args: " + Arrays.toString(selectionArgs));
if (URI_EMPLOYEES.equals(uri)) {
result = DatabaseHandler
.getInstance(getContext())
.getReadableDatabase()
.query(Employee.TABLE_NAME, Employee.FIELDS, selection, selectionArgs, null, null, Employee.COL_NAME, null);
result.setNotificationUri(getContext().getContentResolver(), URI_EMPLOYEES);
} else if (uri.toString().startsWith(EMPLOYEE_BASE)) {
final long id = Long.parseLong(uri.getLastPathSegment());
result = DatabaseHandler
.getInstance(getContext())
.getReadableDatabase()
.query(Employee.TABLE_NAME, Employee.FIELDS,
Employee.COL_ID + " IS ?",
new String[]{String.valueOf(id)}, null, null,
null, null);
result.setNotificationUri(getContext().getContentResolver(), URI_EMPLOYEES);
} else {
throw new UnsupportedOperationException("Not yet implemented");
}
return result;
}
我怎麼會錯過嗎?
好吧,我想我將不得不使用類似的條款! – User3
您還需要處理'runQuery'中的'TextUtils.isEmpty(constraint)== true',來自docs:''Contract:當約束爲空或空時,在任何過濾之前的原始結果必須是返回。「' – pskink
喲隊友!我已經改變了這一切,感覺很好我有一個很好的名單和運行!禮貌你 – User3