我使用以下代码从ListView的MainActivity工具栏中搜索:
SearchView searchView; @Override public 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) { adapter.getFilter().filter(s); return false; } }); return true; }
但是现在我将Listview移至一个片段,如何将适配器从片段传递到主活动?如何更新打字?还有什么比通过适配器更好的方法了吗?先感谢您
更好的方法是使用EventBus。在这种情况下,我们必须将某些数据从活动传递到片段,这确实很有用。
为了使用EventBus,您需要定义一个POJO类,如下所示:
class SearchQueryEvent { String query; public SearchQueryEvent(String query) { this.query=query; } public String getQuery() { return query; } }
现在,应该像这样修改您的代码:
MainActivity.java
SearchView searchView; @Override public 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
@Override public void onResume() { super.onResume(); EventBus.getDefault().register(this); } @Override public 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); }