2014-03-24 68 views
3

我有一個SearchView與SimpleCursorAdapter,它從SQLite數據庫查詢建議。該查詢工作得很好,SearchView彈出一個包含建議的列表。但是這些建議不可見。例如,如果有兩個建議,可以看到有兩個列表條目,但不顯示文本。 SearchView包含在DialogFragment中。Android SearchView與自定義建議適配器

這是光標適配器的初始化和搜索視圖:

@Override 
public boolean onQueryTextChange(String newText) { 
    String[] columns = new String[]{"_id", "name"}; 
    String selection = "name LIKE ?"; 
    String[] selectionArgs = new String[]{newText + "%"}; 
    Cursor c = db.query(TABLE_NAME, 
      columns, 
      selection, 
      selectionArgs, 
      null, 
      null, 
      null); 
    if (c.getCount() > 0) { 
     suggestionAdapter.changeCursor(c); 
     suggestionAdapter.notifyDataSetChanged(); 
     return true; 
    } else { 
     return false; 
    } 
} 
+0

你的代碼幫助我很多,謝謝 – vuhung3990

回答

2

suggestionAdapter = new SimpleCursorAdapter(getActivity(), 
      android.R.layout.simple_list_item_1, 
      null, 
      new String[]{"name"}, 
      new int[]{android.R.layout.simple_list_item_1}, 
      0); 

final SearchView searchProd = (SearchView) dialogView.findViewById(R.id.searchProd); 
searchProd.setOnQueryTextListener(this); 
searchProd.setOnSuggestionListener(this); 
searchProd.setSuggestionsAdapter(suggestionAdapter); 

搜索建議在onQueryTextChanged中,生成新的光標,並注入到suggestionsAdapter產生問題是適配器將顯示列名稱的數據,例如SUGGEST_COLUMN_TEXT_1。這是搜索下拉框中顯示的列。但是你的遊標在你的情況下使用了數據庫列名「*」,所以你需要做的是告訴適配器將你的數據庫列與你的適配器列進行匹配,我這樣做的方式是創建一個類似hashMap的HashMap。把(名稱,名稱+「作爲」SearcgManager.SUGGEST_COLUMN_TEXT_1「),然後在SQLiteBuilder mSqliteBuilder你可以做mSqliteBuilder.setProjectionMap(hashMap)在創建你的遊標之前,我不使用onQueryTextChange搜索建議,但使用contentprovider與可搜索的配置文件但因爲列不匹配是whyI相信你沒有看到你的列表您的建議

+0

謝謝@Byron Coughlin! –

0

的問題是,你的to場在構造函數SimpleCursorAdapter()提供了一個佈局。而應該提供一個資源ID一個文本視圖,如android.R.id.text1

0

我有類似的問題。事實證明,我需要做的就是改變列出的條目中顯示的文本的顏色。所以,我有它像

<TextView 
 
     android:id="@+id/item" 
 
     android:layout_width="wrap_content" 
 
     android:layout_height="wrap_content" 
 
     android:textColor="#FFF2FF" 
 
     />

我希望這有助於。