2013-10-24 38 views
11

我正在使用andriod中的搜索界面,並且正在設置界面。searchView setQuery不起作用

我創建了一個SearchableActivity,它將處理用戶輸入的搜索結果。

現在我遇到了一個問題,當用戶輸入SearchView中的某些內容並點擊搜索關鍵字時,搜索請求將被取消,然後我將接收查詢字符串並執行搜索,但此時文本在SearchView已更改爲默認SearchHit值,而我希望它是查詢字符串。

所以我試圖使用searchView.setQuery(query, false);,但它不工作,有什麼問題?

核心活動代碼:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.map_activity_layout); 

    Log.d("map", "create"); 
    handleIntent(getIntent()); 
} 

public void onNewIntent(Intent intent) { 
    setIntent(intent); 
    handleIntent(intent); 
} 

private void handleIntent(Intent intent) { 
    Log.d("map", "handleIntent"); 
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     String query = intent.getStringExtra(SearchManager.QUERY); 
     //try search 
     Log.d("map", "search and set query:" + query); 
     searchView.setQuery(query, false); // reset the value in of the SearchView 
    } 
} 

的AndroidManifest.xml中:

<activity 
     android:name=".ui.MapActivity" 
     android:launchMode="singleTop"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
      <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 
    </activity> 
+0

你解決了這個問題嗎?即使我對同一點也有同感。 –

回答

1

似乎收到與行動Intent.ACTION_SEARCH的意圖時,下面的方法將被調用:

handleIntent(); 

onCreateOptionsMenu(); 

handleIntent將在之前運行。

與此同時,人們曾經設置searchViewonCreateOptionsMenu

這意味着選項菜單將被重新充值,並且searchView將被重新構建,然後handleIntent中的所有設置都不起作用。

我認爲這是原因。

如果我錯了,請隨時解決我的問題。

11

我建議你延遲設置,直到下一個事件循環(將其添加到消息隊列),因此該代碼可能看起來像這樣:

private void handleIntent(Intent intent) { 
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     final String query = intent.getStringExtra(SearchManager.QUERY); 
     searchView.post(new Runnable() { 

      @Override 
      public void run() { 
       // Important! Make sure searchView has been initialized 
       // and referenced to the correct (current) SearchView. 
       // Config changes (e.g. screen rotation) may make the 
       // variable value null. 
       searchView.setQuery(query, false); 
      } 
     }; 
    } 
} 
+3

只有可靠工作的答案 – Sourabh

11

這不起作用

mSearchView.setQuery(mKeyword, true); 
    MenuItemCompat.expandActionView(mMenuSearch); 

這確實

MenuItemCompat.expandActionView(mMenuSearch); 
    mSearchView.setQuery(mKeyword, true); 

似乎只記住它,你擴展了動作視圖後。 我使用MenuItemCompat只是爲了向下兼容

+2

沒有爲我工作,推遲做 – Mene

+0

mSearchView。onActionViewExpanded(); mSearchView.setQuery(「」,true);爲我工作 – Graeme

1

需要將代碼放在後處理與MenuItemCompat

inflater.inflate(R.menu.menu_my_team, menu); 
    // search manager integration for search widget 
    SearchManager searchManager = (SearchManager) getActivity() 
      .getSystemService(Context.SEARCH_SERVICE); 
    final MenuItem searchMenuItem = menu.findItem(R.id.action_search); 
    // MenuItem helpTutorialMenuItem = menu.findItem(R.id.action_help); 
    mSearchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem); 

    mSearchView.setSearchableInfo(searchManager 
      .getSearchableInfo(getActivity().getComponentName())); 

    mSearchView.setQueryHint("Search by"); 

    if (!TextUtils.isEmpty(queryText)) { 
     mSearchView.post(new Runnable() { 
      @Override 
      public void run() { 
       MenuItemCompat.expandActionView(searchMenuItem); 
       mSearchView.setQuery(queryText, false); 
      } 
     }); 
    } 
    mSearchView.clearFocus(); 
+0

這應該是標記爲答案。 – Max

+0

應將'MenuItemCompat.expandActionView(searchMenuItem);'退出運行並在發佈之前添加。這一直在爲我工作,但注意到它不是我正在測試的牛軋糖設備。 –

+0

完美工作 – Akshay

0

在我而言,這是不工作,因爲我是在片段不再連接到窗戶。將它移到上面,我在新的搜索結果片段中進行了修改。