Android----android利用數據庫實現搜索聯想功能


【轉】android利用數據庫實現搜索聯想功能

主要實現的效果是和google搜索一樣,實現聯想功能,如用戶輸入a,列表中則顯示以a開頭的數據庫中的信息。下面是實現的效果圖:

image image

 

實現的主要代碼:

public class SearchProvider extends ContentProvider {     @Override     public int delete(Uri uri, String selection, String[] selectionArgs) {         return 0;     }

    @Override     public String getType(Uri uri) {         return null;     }     @Override     public Uri insert(Uri uri, ContentValues values) {         return null;     }

    @Override     public boolean onCreate() {         // 添加所有的數據         SearchUtil.getInstance().ensureLoaded();         return true;     }

    @Override     public Cursor query(Uri uri, String[] projection, String selection,             String[] selectionArgs, String sortOrder) {         String query = null;         if (uri.getPathSegments().size() > 1) {             query = uri.getLastPathSegment().toLowerCase();         }         return getSuggestions(query);     }

    private Cursor getSuggestions(String query) {         String processedQuery = query == null ? "" : query.toLowerCase();         List<SearchUtil.Word> words = SearchUtil.getInstance().getMatches(                 processedQuery);

        MatrixCursor cursor = new MatrixCursor(COLUMNS);         long id = 0;         for (SearchUtil.Word word : words) {             cursor.addRow(columnValuesOfWord(id++, word));         }

        return cursor;     }

    private Object[] columnValuesOfWord(long id, SearchUtil.Word word) {         return new Object[] { id, // _id                 word.word, // text1                 word.definition, // text2                 word.word, // intent_data (included when clicking on item)         };     }

    private static final String[] COLUMNS = { "_id",             SearchManager.SUGGEST_COLUMN_TEXT_1,             SearchManager.SUGGEST_COLUMN_TEXT_2,             SearchManager.SUGGEST_COLUMN_INTENT_DATA,// 數據傳遞到intenter中     };

    @Override     public int update(Uri uri, ContentValues values, String selection,             String[] selectionArgs) {         return 0;     }

相關搜索的配置:

<application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".SearchActivty" android:label="@string/app_name">         <intent-filter>             <action android:name="android.intent.action.MAIN" />             <category android:name="android.intent.category.LAUNCHER" />         </intent-filter>         <intent-filter>             <action android:name="android.intent.action.SEARCH"  />             <category android:name="android.intent.category.DEFAULT" />         </intent-filter>         <meta-data android:name="android.app.searchable"             android:resource="@xml/searchable" />     </activity>     <activity android:name=".ResultActivty" android:label="@string/search_query_results">     </activity>     <provider android:name="SearchProvider"         android:authorities="search"         android:syncable="false" /> </application>

在res的xml文件夾下創建searchable.xml

<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android"         android:label="@string/search_label"         android:searchSuggestAuthority="search"         android:searchSuggestIntentAction="android.intent.action.VIEW"       > </searchable>

結果返回:

public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     Intent intent = this.getIntent();     setContentView(R.layout.main);     if (Intent.ACTION_VIEW.equals(intent.getAction())) {         SearchUtil.Word theWord = SearchUtil.getInstance().getMatches(                 intent.getDataString().trim().toLowerCase()).get(0);         launchWord(theWord);         finish();     } else {     Button button = (Button) findViewById(R.id.button);     button.setOnTouchListener(new OnTouchListener() {         @Override         public boolean onTouch(View v, MotionEvent event) {             onSearchRequested();             return false;         }     }); } } private void launchWord(SearchUtil.Word pavilion) {     Intent next = new Intent();     next.setClass(this, ResultActivty.class);     Bundle bundle = new Bundle();     bundle.putString("word", pavilion.word);     next.putExtras(bundle);     next.putExtras(bundle);     startActivity(next); }

其中聯想的列表還可以實現自定義的列表,需要進一步細化。

源代碼:http://easymorse-android.googlecode.com/svn/tags/search/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM