我使用此代码从 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;
}
但是现在我将列表视图移动到片段中,如何将适配器从片段传递到主活动?如何更新打字?
除了通过适配器还有什么更好的方法吗?
先感谢您
可以使用更好的方法EventBus。在这样的场景中,它确实很有帮助,在这种场景中,我们必须将某些数据从 Activity 传递到 Fragment。
为了使用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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)