我使用SQLiteDataBase创建了一个带有Custom Suggestion的searchView,但是从不调用query()方法,因此它没有显示任何建议。 我的ContentProvider的代码
package com.example.abhishek.fblogin.helper;
public class HostelContentProvider extends ContentProvider {
private DataBaseHandler handler;
private SQLiteDatabase db;
UriMatcher mUriMatcher = buildUriMatcher();
private static String AUTHORITY="com.example.abhishek.fblogin.helper.HostelContentProvider";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/pg" );
private final int SUGGESTIONS=0;
private UriMatcher buildUriMatcher(){
UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
// Suggestion items of Search Dialog is provided by this uri
uriMatcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY,SUGGESTIONS);
return uriMatcher;
}
@Override
public boolean onCreate() {
handler = new DataBaseHandler(getContext());
db = handler.getWritableDatabase();
return true;
}
@Nullable
@Override
public String getType(Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(Uri uri, ContentValues values) {
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return 0;
}
private static final HashMap<String, String> PROJECTION_MAP = new HashMap<String, String>();
static {
PROJECTION_MAP.put("_id", "_id");
PROJECTION_MAP.put(SearchManager.SUGGEST_COLUMN_TEXT_1,
"name AS " + SearchManager.SUGGEST_COLUMN_TEXT_1);
PROJECTION_MAP.put(SearchManager.SUGGEST_COLUMN_INTENT_DATA,"_id AS "+SearchManager.SUGGEST_COLUMN_INTENT_DATA);
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
builder.setTables("pg_table");
switch (mUriMatcher.match(uri)) {
case SUGGESTIONS:
String query = uri.getLastPathSegment();
if (query.equals("")) {
return null;
}
builder.appendWhere("INSTR(UPPER(name),UPPER('" + query + "'))");
builder.setProjectionMap(PROJECTION_MAP);
break;
}
return builder.query(db,projection,null,null,null,null,null);
}
}`
我的舱单代码是:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.abhishek.fblogin">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".helper.AppController"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/app_id" />
<activity
android:name=".Activity.MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Activity.SearchableActivity"
android:label="@string/title_activity_searchable"
android:launchMode="singleTop"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<activity
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
android:name=".Activity.LoginActivity"
android:label="@string/title_activity_login"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".Activity.ExplorePGActivity"
android:label="@string/title_activity_explore_pg"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.app.default_searchable"
android:value=".SearchableActivity" />
</activity>
<activity
android:name=".Activity.MyProfileActivity"
android:label="@string/title_activity_my_profile"
android:theme="@style/AppTheme.NoActionBar"></activity>
</application>
<provider
android:name=".helper.HostelContentProvider"
android:authorities="com.example.abhishek.fblogin.helper.HostelContentProvider"
android:exported="true"/>
答案 0 :(得分:0)
确保您已将android:searchSuggestAuthority
文件中的searchable.xml
值设置为与清单文件中提供程序元素中的android:authorities
值完全相同