您好我想在我的导航抽屉里放一个搜索栏,我想过滤片段中的项目。
我在ss的导航抽屉下有Fragement。 这里有一些代码。
<item android:id="@+id/action_search"
android:title="Search"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"
/>
MainActivity中的菜单
if (id == R.id.action_search) {
final MenuItem searchItem = item.findItem(R.id.action_search);
final SearchView searchView = (SearchView)
MenuItemCompat.getActionView(item);
searchView.setOnQueryTextListener(this);
}
这是我搜索的一些代码
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
newText = newText.toLowerCase();
List<Example> newlist = new ArrayList<>();
for(Example example: newlist){
String name = example.getTitle().getRendered().toLowerCase();
if (name.contains(newText)) newlist.add(example);
}
adapter.setFilter(newlist);
return true;
}
}
现在我将如何在mainActivity或片段中对导航抽屉进行编码,以便我可以从导航抽屉中搜索片段。感谢。
答案 0 :(得分:0)
创建一个SearchManager类,每次调用onQueryTextChange时都会获取数据。然后在SearchManager中创建一个自定义侦听器并在片段中实现它,并在每次调用侦听器时刷新它。
我在MainActivity中有类似的东西
SearchManager searchManager = SearchManager.sharedInstance();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
searchManager.onSearchQueryChanged(query);
return false;
}
@Override
public boolean onQueryTextChange(String query) {
searchManager.onSearchQueryChanged(query);
return false;
}
});
SearchManager类,我使用单例,因为我只想从活动和片段访问一个实例
public class SearchManager {
private static SearchManager searchManager;
private OnSearchResultsListener onSearchResultsListener;
private List<mObject> searchResultList = new ArrayList<>();
public SearchManager() {
}
public void setOnSearchResultsListener(OnSearchResultsListener onSearchResultsListener) {
this.onSearchResultsListener = onSearchResultsListener;
}
public static SearchManager sharedInstance() {
if (searchManager == null) {
searchManager = new SearchManager();
}
return searchManager;
}
public void onContactSearchQueryChanged(String query) {
//do your logic here
this.searchResultList = ...;
onContactsSearchResultsListener.OnSearchResults(searchResultList);
}
}
一个简单的自定义侦听器
public interface OnSearchResultsListener {
void OnSearchResults(List<mObject> searchResultList);
}
然后在你的片段中
public class MFragment extends Fragment implements OnSearchResultsListener {
...
//in your OnCreateView
SearchManager.sharedInstance().setOnSearchResultsListener(this);
...
@Override
public void OnContactsSearchResults(List<mObject> searchResultList) {
//refresh UI
}