2013-10-17 91 views
2

我在我的app中有幾項活動,這些活動旨在執行一些特定的任務。 我想在幾乎所有這些活動中都有搜索功能。Android:在SearchActivity的SearchView中顯示搜索查詢

我的設計如下:

活動1:隨着SearchView小部件Actionbar

活性2:隨着Actionbar

SearchActivitySearchView部件:執行所searchdisplay結果爲ListView

我已經在SearchActivity的清單文件中完成了必要的配置。

當我觸摸搜索圖標(放大鏡)時,SearchView得到擴展以允許用戶輸入查詢,然後用戶觸發搜索並將搜索意圖傳送到SearchActivity

由於用戶最初輸入的Activity搜索查詢,我沒有看到查詢和SearchView在我SearchActivity(這是基本要求,以允許用戶進行進一步的搜索)。

我知道這樣做,我也需要我的SearchActivity中的SearchView,但是如何預先使用在前一個活動中輸入的查詢填充它並以展開狀態顯示?

+0

傳遞搜索查詢(字符串)在捆綁到SearchActivity那麼你可以展開鍵盤,並填寫的編輯字段搜索項目更多搜索 –

+0

我希望它像Gmail,Play商店的應用程序。在SearchActivity中,當第一次加載結果時,鍵盤沒有展開,在SearchActivity中設置查詢的最佳位置 - onCreateOptionMenu()方法或doSearch()是什麼? – kiran

回答

0

我通常會做這樣的事情(加hving適配器實現的可篩選):

public class ActivityFiltrable extends SherlockFragmentActivity implements OnQueryTextListener{ 

    protected String _searchCurrentQuery; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.activity); 
     // ABS 
     ActionBar bar = getSupportActionBar(); 
     bar.setTitle(R.string.tle_search); 
     bar.setDisplayHomeAsUpEnabled(true); 

     //DO STUFF 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    protected void onDestroy() { 
     closeKeyboard(this); 
     super.onDestroy(); 
    } 
    @Override 
    public void onBackPressed() { 
     finish(); 
    } 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     menu.clear(); 
     getSupportMenuInflater().inflate(R.menu.action_bar_search, menu); 
     // SEARCH MENUITEM 
     MenuItem searchItem = menu.findItem(R.id.menu_search); 
     SearchView searchView = (SearchView) searchItem.getActionView(); 
     searchView.setSubmitButtonEnabled(true); 
     searchView.setOnQueryTextListener(this); 
     return super.onPrepareOptionsMenu(menu); 
    } 

    public static void closeKeyboard(Context context) { 
     try { 
      InputMethodManager inputManager = (InputMethodManager) ((SherlockFragmentActivity) context).getSystemService(Context.INPUT_METHOD_SERVICE); 
      inputManager.hideSoftInputFromWindow(((SherlockFragmentActivity) context).getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
     } 
     catch (Exception e) { 
      // TODO:ERROR CLOSING KEYBOARD 
     } 
    } 

    /** 
    * SEARCH 
    */ 
    @Override 
    public boolean onQueryTextSubmit(String query) { 
     searchAction(query); 
     closeKeyboard(this); 
     return true; 
    } 

    @Override 
    public boolean onQueryTextChange(String newText) { 
     searchAction(newText); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case android.R.id.home: 
       if (item.getItemId() == android.R.id.home) { 
        finish(); 
        // overridePendingTransition(R.animator.anim_left, R.animator.anim_right); 
        return true; 
       } 
       break; 
    } 

    protected void searchAction(String query) { 
     _searchCurrentQuery = query.toString(); 
     EtablissementApplication._adapterFilterSearch.getFilter().filter(_searchCurrentQuery); 
    } 
} 
+0

謝謝@Yume117,它有幫助。第一次進入SearchActivity時,我仍然無法隱藏鍵盤。我在SearchView中設置searchquery,並在onCreateOptionsMenu()回調中調用closeKeyboard()。在按預期工作的onQueryTextSubmit()中也稱爲closeKeyboard()。 – kiran

+0

我有種從我的項目中複製代碼,所以我很抱歉,如果我使用的方法或xml文件,你沒有^^ –

+1

我理解你的代碼,並寫了類似的方法closeKeyboard()。我在SearchView中設置了查詢並調用了menuItem.expandActionView(),以便它在SearchActivity的操作欄中顯示爲填充和展開,但軟鍵盤可見而不是隱藏。我在SearchActivity的清單中設置了android:windowSoftInputMode =「stateHidden」,在SearchActivity上執行後續搜索時隱藏鍵盤 - 這是所需的。 – kiran

相關問題