2017-03-27 5 views
8

open source dictionary projectを変更しようとしています。ActionBarSherlockSearchView$SearchAutoCompleteを使用しています。たとえば、「Google Play」というエントリがあります。 SearchViewは「Google」と入力したときに候補を返すことができますが、「再生」を検索した場合はそうではありません。 SearchViewがテキストを含むエントリを検索できるようにするにはどうすればよいですか?SearchView AutoCompleteTextViewで特定の文字を含むテキストを検索

 public boolean onQueryTextChange(String newText) { 
      if (MdxDictBase.isMdxCmd(newText)){ 
       currentEntry.setEntryNo(DictEntry.kSystemCmdEntryNo); 
      } 
      if (!skipUpdateEntryList) { 
       dict.locateFirst(newText, true, true, true, false, currentEntry); 
       syncHeadwordList(); 
      } 
      skipUpdateEntryList = false; 
      return true; //return false if want the system provide a suggestion list? 
     } 

完全コードはfound hereです。

そして、これはCursorです。これはI found from hereです。

public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { 
     Log.d(TAG, "Got query:" + uri.toString()); 
     if (uri.getPath() != null && uri.getPath().startsWith(SEARCH_PATH)) { 
      if (fCurrentDict != null && fCurrentDict.isValid()) { 
       String query=uri.getLastPathSegment(); 
       if (query!=null && query.length()>0){ 
        DictEntry entry = new DictEntry(0, "", fCurrentDict.getDictPref().getDictId()); 
        if (query != null && query.length() > 0) 
         fCurrentDict.locateFirst(query, true, false, true, false, entry); 
        if (entry.isValid()) { 
         String limit = uri.getQueryParameter(SearchManager.SUGGEST_PARAMETER_LIMIT); 
         int maxResultCount = 20; 
         if (limit != null && limit.length() > 0) { 
          try { 
           maxResultCount = Integer.parseInt(limit); 
          } catch (NumberFormatException e) { 
           e.printStackTrace(); 
          } 
         } 
         ArrayList<DictEntry> entryList = new ArrayList<DictEntry>(); 
         fCurrentDict.getEntries(entry, maxResultCount, entryList); 
         String[] columns = new String[]{ 
           BaseColumns._ID, 
           SearchManager.SUGGEST_COLUMN_TEXT_1, 
           SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID, 
           SearchManager.SUGGEST_COLUMN_SHORTCUT_ID}; 
         MatrixCursor cursor = new MatrixCursor(columns, maxResultCount); 
         Object[] row; 
         for (DictEntry cur_entry : entryList) { 
          String intentDataId = String.format("%d_%d_%s", cur_entry.getDictId(), cur_entry.getEntryNo(), cur_entry.getHeadword()); 
          row = new Object[]{cur_entry.hashCode(), cur_entry.getHeadword(), intentDataId, SearchManager.SUGGEST_NEVER_MAKE_SHORTCUT}; 
          cursor.addRow(row); 
         } 
         return cursor; 
        } 
       } 
      } 
     } 
     return null; 
    } 

これはlocateFirst方法I found from hereです。

/** 
    * Locates the first entry that match the specified headword 
    * 
    * @param headword  Headword to be searched for 
    * @param convertKey Convert the given headword into different Chinese form according to dictionary settings? 
    * @param partialMatch Match partial of the headword. For example "abc" can be matched with "abd" headword search 
    * @param entry  The matched entry if found 
    * @return Return kMdxSuccess when succeed, otherwise return error codes. 
    */ 
    public synchronized int locateFirst(String headword, boolean convertKey, boolean partialMatch, boolean startWithMatch, boolean bestMatch, DictEntry entry) { 
     if (isValid()) { 
      return locateFirstN(headword, convertKey, partialMatch, startWithMatch, bestMatch, entry); 
     } else { 
      return kMdxDatabaseNotInited; 
     } 
    } 

これは私が提案のリストを表示する責任があると考えているアダプタです:文字列の.Containsメソッドを使用TextChangedイベントに https://bitbucket.org/raymanzhang/mdict-android-opensource/src/eba7b9b4ead17a5b3e027da4a37dbd4ee1162596/src/cn/mdict/widgets/MdxAdapter.java?at=master&fileviewer=file-view-default

+1

投稿したコードにフィルタリングの兆候は見られません。 'searchView'の入力文字列に基づいてフィルタリングを行うクラスやコードが必要です。 'searchView'から文字列を取得し、それを' onTextChanged'コールバックの中で検索クエリとして渡すコードを探し、それに関連するコードとそれに関連するコードを投稿してください。 – ahasbini

+0

あなたの検索コードを追加してください。十分なコードではありません。 – ADM

+0

私は自分の質問を編集しました。 – user2872856

答えて

-1

。そして、その方法に基づいて必要な検索を実行します。これがあなたを助けてくれることを願っています。

+0

私は自分の質問を更新しました。見てください。 – user2872856

関連する問題