更好的方法是使用EventBus。在这种情况下,我们必须将某些数据从活动传递到片段,这确实很有用。
为了使用EventBus,您需要定义一个POJO类,如下所示:
class SearchQueryEvent { String query; public SearchQueryEvent(String query) { this.query=query; } public String getQuery() { return query; }}现在,应该像这样修改您的代码:
MainActivity.java
SearchView searchView;@Overridepublic boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate( R.menu.main, menu); MenuItem myActionMenuItem = menu.findItem( R.id.action_search); searchView = (SearchView) myActionMenuItem.getActionView(); searchView.setonQueryTextListener(new SearchView.onQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String s) { EventBus.getDefault().post(new SearchQueryEvent(s)); return false; } }); return true;}YourFragment.java
@Overridepublic void onResume() { super.onResume(); EventBus.getDefault().register(this);}@Overridepublic void onPause() { EventBus.getDefault().unregister(this); super.onPause();}@Subscribe(threadMode = ThreadMode.MAIN)public void onSearchQuery(SearchQueryEvent event) { String query=event.getQuery(); adapter.getFilter().filter(query);}


