如何在片段中从工具栏中搜索Listview [英] How To Search In Listview From Toolbar In Fragment
问题描述
我正在使用此代码从ListView中的MainActivity工具栏进行搜索:
I was using this code to search from my MainActivity Toolbar in a ListView:
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移到了一个片段,怎么能我将适配器从片段传递给主要活动?如何更新打字?
有没有比传递适配器更好的方法?
提前谢谢
But now I moved my Listview to a fragment, how can I pass the adapter from the fragment to the main activity? How can I update the typing? Is there any better way then passing the adapter? Thank you in advance
推荐答案
更好的方法是使用 EventBus 。它在这样的场景中非常有用,我们必须将某些数据从一个Activity传递给一个片段。
A better approach can be using EventBus. It's really helpful in a scenario like this in which we have to pass certain data from an Activity to a Fragment.
要使用EventBus,你需要定义一个 POJO 类,有点像这样:
For using EventBus, you need to define a POJO class, somewhat like this:
class SearchQueryEvent {
String query;
public SearchQueryEvent(String query) {
this.query=query;
}
public String getQuery() {
return query;
}
}
现在,您的代码应该像这样修改:
Now, your code should be modified like this:
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);
}
这篇关于如何在片段中从工具栏中搜索Listview的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!