2015-08-09 51 views
1

我有一個搜索視圖的操作欄,我有一個片段設置了選項菜單。在我的MainActivity SearchView工作正常,但在我的Fragment(我需要處理事件OptionMenuItem做一些事情),setHasOptionMenu後,然後SearchView無法正常工作。這裏是我的代碼錯誤在ActionBar中搜索查看

選項菜單中MainActivity

public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    // Create SearchView 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 
    searchView.setSubmitButtonEnabled(false); 
    searchView.setQueryHint("Search Here"); 
    searchView.setSearchableInfo(searchManager 
      .getSearchableInfo(getComponentName())); 
    SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String s) {   
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String s) { 
      if(s.length() > 0){ 
       Tab1.listadaptor.getFilter().filter(s); 
       Tab2.listadaptor.getFilter().filter(s); 
      }else{ 
       pager.setAdapter(adapter); 
       if(SlidingTabLayout.userState){ 
        pager.setCurrentItem(0); 
       }else{ 
        pager.setCurrentItem(1); 
       } 
      } 
      return true; 
     } 
    }; 
    searchView.setOnQueryTextListener(queryTextListener); 
    return super.onCreateOptionsMenu(menu); 
} 

OptionMenuItem在片段

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()){ 
    //Do Something 

    } 
    return super.onOptionsItemSelected(item); 
} 
@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    setHasOptionsMenu(true); 
} 
+0

你能檢查一下嗎? http://stackoverflow.com/questions/31489109/android-searchview-in-toolbar/31490543#31490543,我給出了同樣的答案 –

+0

謝謝@HirenPatel的答案,但我的問題不是這樣的。我需要在MainActivity中使用searchView,而不是在Fragment中重新創建,因爲我的「pager」和「adapter」無法在Fragment中調用。我不重新創建actionBar,我只設置了HashOptionMenu並使用onOptionsItemSelected。我不知道爲什麼我的所有選項都能正常工作,但只有我的SearchView無法輸入。我嘗試將日誌消息放入SearchView的代碼中,當我單擊SearchView圖標時(無需輸入),它會返回消息。也許錯誤是我的「尋呼機」和「適配器」。我認爲它不能在片段中被調用,但現在我不知道我會做什麼 –

回答

0

這個作品!在Kotlin,如果你需要更多的幫助,請告訴我。

override fun onCreateOptionsMenu(menu: Menu): Boolean { 
    super.onCreateOptionsMenu(menu) 
    val inflater = menuInflater 
    inflater.inflate(R.menu.search_activity_menu, menu) 
    searchView = menu.findItem(R.id.btn_search_station).actionView as 
    SearchView 
     return true 

} 

private fun setErrorOnSearchView(searchView: SearchView, errorMessage: String) { 
    val id = searchView.context 
      .resources 
      .getIdentifier("android:id/search_src_text", null, null) 
    val editText = searchView.find<EditText>(id) 
    editText.error = errorMessage 
} 

private fun cleanErrorOnSearchView(searchView: SearchView) { 
    val id = searchView.context 
      .resources 
      .getIdentifier("android:id/search_src_text", null, null) 
    val editText = searchView.find<EditText>(id) 
    editText.error = null 
}