2014-08-31 93 views
0

我正在嘗試製作一個應用程序,該應用程序使用與運行Android 2.3版的設備兼容的SearchView,其版本高達4.4+。目前,我有以下代碼ActionBarActivity內,其工作在設備運行細蜂窩狀及以上,但不早設備:OnQueryTextListenerCompat未被觸發

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    android.support.v7.widget.SearchView searchView = (android.support.v7.widget.SearchView) menu.findItem(R.id.action_search).getActionView(); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    searchView.setIconified(true); 
    searchView.setOnQueryTextListener(new OnQueryTextListener() { 

     @Override 
     public boolean onQueryTextSubmit(String s) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String s) { 
      return false; 
     } 
    }); 
} else { 
    View searchView = SearchViewCompat.newSearchView(this); 
    SearchViewCompat.setOnQueryTextListener(searchView, new OnQueryTextListenerCompat() { 
     @Override 
     public boolean onQueryTextSubmit(String s) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String s) { 
      return false; 
     } 
    }); 
} 

我面臨的問題是,搜索查看用戶界面顯示了在更早的設備很好,但OnQueryTextListenerCompat似乎不會被觸發。我錯過了什麼嗎?謝謝。

+0

其實,我剛剛注意到下面的代碼返回一個空視圖:view searchView = SearchViewCompat.newSearchView(this); – Henrique 2014-09-01 00:18:24

回答

1

我已經不使用SearchViewCompat我測試它的從薑餅兼容性解決了這個問題,並在我的search_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:yourapp="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" > 
<item 
     android:id="@+id/menu_item_search" 
     android:icon="@android:drawable/ic_menu_search" 
     android:orderInCategory="1" 
     android:title="@string/menu_search" 
     yourapp:actionViewClass="android.support.v7.widget.SearchView" 
     yourapp:showAsAction="always|collapseActionView"/> 
</menu> 

,並在我main.xml中

最新版本

public class Main extends ActionBarActivity implements OnQueryTextListener { 
    private SearchView searchView; 
    private SearchManager searchManager; 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
     setContentView(R.layout.activity_main); 
    } 


    @Override 
      public boolean onCreateOptionsMenu(final Menu menu) { 
       // Inflate the menu; this adds items to the action bar if it is present. 
       getMenuInflater().inflate(R.menu.search_menu, menu); 
       View view = MenuItemCompat.getActionView(menu.findItem(R.id.menu_item_filter)); 
    searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
       MenuItem searchItem = menu.findItem(R.id.menu_item_search); 
       searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
       searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
       searchView.setQueryHint("Search..."); 
       searchView.setIconifiedByDefault(false); 
       searchView.setIconified(false); 
       searchView.setOnQueryTextListener(Main.this); 
       searchView.clearFocus(); 
       return super.onCreateOptionsMenu(menu); 
    } 
    public boolean onQueryTextChange(String val) { 

     if(!val.isEmpty()){ 
      Log.e(""+val); 
     } 
     return false; 
    } 

    @Override 
    public boolean onQueryTextSubmit(String val) { 
     Log.e(""+val); 
     return false; 
    } 
} 
+1

public boolean onCreateOptionsMenu()沒有返回任何值? – Jorgesys 2015-10-29 17:00:24

+1

@Elenasys謝謝你指出。 :) – Cjames 2015-10-30 04:52:34