2014-08-31 101 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