2011-09-20 39 views
1

我正在創建簡單的演示MultiAutoCompleteTextView像自動完成結果自定義MultiAutoCompleteTextView必須建議我'謝謝你'當我輸入'TY'

我已經通過官方文檔MultiAutoCompleteTextView。完成了這個簡單的教程。

但是這與我試圖實現的不同。

我要的是:

當我鍵入「TY」,然後自動完成結果必須表明我的「謝謝」。

此類首字母縮寫詞和含義對存儲在數據庫中。

Ofcourse我的首字母縮寫詞和意義對並不多,所以存儲不是問題(也可以存儲在String Array中)。

我該如何做到這一點?

回答

1

我自己解決了它:

我創建了自定義CursorAdapter。使用我的Custom CursorAdapter的對象,我得到了期望的結果。

public static class MessageAdapter extends CursorAdapter implements Filterable 
    { 
     DatabaseHelper dbHelper; 

     public MessageAdapter(Context context, Cursor c) 
     { 
      super(context, c); 
      dbHelper=new DatabaseHelper(context); 
      dbHelper.open(); 
      mContent = context.getContentResolver(); 
     } 

     @Override 
     public View newView(Context context, Cursor cursor, ViewGroup parent) 
     { 
      final LayoutInflater inflater = LayoutInflater.from(context); 
      final TextView view = (TextView) inflater.inflate(android.R.layout.simple_dropdown_item_1line, parent, false); 
      view.setText(cursor.getString(cursor.getColumnIndex(DatabaseHelper.KEY_MEANING))); 
      return view; 
     } 

     @Override 
     public void bindView(View view, Context context, Cursor cursor) 
     { 
      ((TextView) view).setText(cursor.getString(cursor.getColumnIndex(DatabaseHelper.KEY_MEANING))); 
     } 

     @Override 
     public String convertToString(Cursor cursor) { 
      return cursor.getString(cursor.getColumnIndex(DatabaseHelper.KEY_MEANING)); 
     } 

     @Override 
     public Cursor runQueryOnBackgroundThread(CharSequence constraint) 
     { 
      if (getFilterQueryProvider() != null) 
      { 
       return getFilterQueryProvider().runQuery(constraint); 
      } 

      StringBuilder buffer = null; 
      String args = null; 
      if (constraint != null) 
      { 
       args=constraint.toString();    
      } 
      Cursor newCursor=dbHelper.getMeaning(args); 
      //You have to return results based on the above cursor results. So query whatver you want and return this cursor back. 
      return newCursor; 
     } 
     private ContentResolver mContent;   
    } 

對於我已經創建getMeaning()方法在我DatabaseHelper類返回MultiAutoCompleteTextView基於字符串所需的結果簡單性:

在DBHelper類,

public Cursor getMeaning(String searchString) 
    { 
     Cursor cursor=sqdb.query(MY_DB, new String[]{KEY_ID,KEY_MEANING}, KEY_SEARCH+" like '"+searchString.toUpperCase()+"%'", null,null, null, null); 
     return cursor; 
    } 

參考:http://hello-android.blogspot.com/2011/06/using-autocompletetextview-with-sqlite.html

0

實現此目的的一種方法是在字符串數組中添加首字母縮寫詞和完整字符串,例如Thank You - TY。這樣,當您鍵入首字母縮寫詞時,自動完成功能也可以識別它。一旦用戶選擇了單詞,就可以在連字符「 - 」後刪除該單詞。

+0

感謝您的快速響應。我已經知道你的邏輯。但我不想這樣走。因爲它會不必要地識別其他具有「ty」的項目,例如/// –

1

我的猜測是要做你自己的ArrayAdapter適配器。 並在該適配器中檢查字符串值是什麼,如果它是TY,則添加「謝謝」。

+0

你能用示例代碼來解釋嗎? –

+0

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html檢查EfficientAdapter。或谷歌自定義ArrayAdapter,只是讓你的ArrayAdapter