从navdrawer搜索片段

时间:2017-09-28 06:00:35

标签: java android fragment navigation-drawer searchbar

您好我想在我的导航抽屉里放一个搜索栏,我想过滤片段中的项目。

Here is the screenshot.

我在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或片段中对导航抽屉进行编码,以便我可以从导航抽屉中搜索片段。感谢。

1 个答案:

答案 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
    }