2016-06-18 28 views
2

我剛剛在我的Actionbar中實現了「android.support.v7.widget.SearchView」來搜索一些pdf文件。 當我插入多個字符進行搜索時,建議列表顯示過時。但是當我只輸入一個字符時,雖然填充建議的函數被調用,但沒有顯示任何提議。 你有一個想法如何改變這種行爲,獲得只有輸入一個字符時顯示的建議?如何使Actionbar中的SearchView向我提供來自FIRST角色的建議?

這是我在其中簡單定義菜單內的searchview。

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
<item 
    android:id="@+id/pdf_menu_search_item" 
    android:icon="@mipmap/ic_search_white_24dp" 
    android:title="Suche" 
    app:actionViewClass="android.support.v7.widget.SearchView" 
    app:showAsAction="always"/></menu> 

在我的活動,下面的代碼實現: enter image description here 只有一個字符不工作:

private static final String[] SUGGESTIONS = { 
     "Amsterdam","Berlin","Rome" 
}; 
private SimpleCursorAdapter mAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_contextual_actionbar, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    return super.onOptionsItemSelected(item); 
} 

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    final SearchView mSearchView; 
    mSearchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.pdf_menu_search_item)); 
    final String[] from = new String[] {"cityName"}; 
    final int[] to = new int[] {android.R.id.text1}; 
    mAdapter = new SimpleCursorAdapter(Startseite.this, 
      android.R.layout.simple_list_item_1, 
      null, 
      from, 
      to, 
      CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); 

    mSearchView.setSuggestionsAdapter(mAdapter); 
    mSearchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() { 
     @Override 
     public boolean onSuggestionClick(int position) { 
      return true; 
     } 

     @Override 
     public boolean onSuggestionSelect(int position) { 
      return true; 
     } 
    }); 

    mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 

      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      populateAdapter(newText); 
      return true; 
     } 
    }); 
    return super.onPrepareOptionsMenu(menu); 
} 
// You must implements your logic to get data using OrmLite 
private void populateAdapter(String query) { 
    final MatrixCursor c = new MatrixCursor(new String[]{ BaseColumns._ID, "cityName" }); 
    for (int i=0; i<SUGGESTIONS.length; i++) { 
     if (SUGGESTIONS[i].toLowerCase().startsWith(query.toLowerCase())) 
     { c.addRow(new Object[] {i, SUGGESTIONS[i]}); } 
    } 
    mAdapter.changeCursor(c); 
    mAdapter.notifyDataSetChanged(); 
} 

與多個字符工作 enter image description here

請有沒有人一個想法如何解決這個問題?

回答

0

我剛剛找到答案。 如果您正在使用AppCompatActivity(像我一樣),你可以設置這樣的門檻搜索查看:

AutoCompleteTextView searchAutoCompleteTextView = (AutoCompleteTextView) mSearchView.findViewById(getResources().getIdentifier("search_src_text", "id", getPackageName())); 
searchAutoCompleteTextView.setThreshold(1); 

現在,搜索建議會從第一個字符顯示。 也許這對他人有幫助:)