2013-04-10 43 views
0

我有一個存儲用戶搜索歷史記錄的應用程序。我現在也添加了「自定義建議」。這需要我再添加一個方法,query()並在我的MyCustomSuggestionProvider類中覆蓋它。在ContentProvider中重寫`query()`可防止顯示最近的建議

但是,這樣做會阻止顯示最近的建議。他們仍然存儲在suggestions.db中。當我刪除query()方法測試時,最近的建議回來。

有誰知道如何讓這兩件事情一起工作?

+0

那麼,首先你必須決定你真的想要發生什麼。這聽起來像你想要最近的建議和你的自定義建議,但在什麼組合?你最近想要顯示的最新建議?或者您是否希望首先顯示自定義建議?你想展示他們全部,還是隻有近一半的習慣和最近的一半?在你決定之後,嘗試調用'query'的重載實現中的'super.query()',然後根據需要合併你的結果。 – kabuko 2013-04-10 17:35:35

+0

@ kabuko嗯,我想出了我的問題,但那不是發生了什麼事情。我需要找出如何合併它們,但這些列需要匹配我相信,我很難找出一個。 – KickingLettuce 2013-04-10 18:06:57

回答

0

問題不是過度查詢(),這是我如何處理它。這是我的解決方案:

@Override 
public Cursor query(Uri uri, String[] projection, String selection, 
     String[] selectionArgs, String sortOrder) { 

    Cursor recentCursor = super.query(uri, projection, selection, 
      selectionArgs, sortOrder); 

    query = selectionArgs[0]; 
    if (query == null || query.length() < 3) { 

     return recentCursor; 

    } else { 

     query = selectionArgs[0]; 

     MatrixCursor customCursor = new MatrixCursor(COLUMN_NAMES); 

     SearchSuggestionObject[] suggestions = getSuggestionsFromWebFeed(query); 

     for (SearchSuggestionObject suggestion : suggestions) { 

      customCursor.addRow(new Object[] { suggestion.getId(), 
        suggestion.getItem(), suggestion.getCat(), 
        suggestion.getItem(), suggestion.getItem(), 
        suggestion.getCat(), "android.intent.action.SEARCH" }); 
     } 

     return customCursor; 
    } 
}