SearchView与Fragment里面的工具栏

时间:2015-08-06 09:29:43

标签: android android-fragments android-appcompat android-toolbar android-design-library

我在SearchView内部使用Toolbar片段,我想注册SearchView.OnQueryTextListener接口,这样我就可以在用户执行搜索时获得回调。

我正在使用Toolbar作为(onCreateView内部):

来夸大菜单
mToolbar = (Toolbar) v.findViewById(R.id.toolbar);
mToolbar.inflateMenu(R.menu.menu_main);
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        onOptionsItemSelected(item);
        return false;
    }
});

以这种方式膨胀菜单不会调用onCreateOptionMenu方法,通常我们会在该方法中注册回调:

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.menu_main, menu);
        mGoTodayMenuItem = menu.findItem(R.id.action_go_to_today);
        mSearchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

        SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
        mSearchView.setQueryHint("Search");
        mSearchView.setSearchableInfo(searchManager
                .getSearchableInfo(getActivity().getComponentName()));
        mSearchView.setOnQueryTextListener(this);
    }

1 个答案:

答案 0 :(得分:0)

由于您需要在片段的var httpRequest; document.body.onload = populateTable; var userListData = []; // Fill table with data function populateTable() { httpRequest = new XMLHttpRequest(); httpRequest.onreadystatechange = function() { try { if (httpRequest.readyState === 4) { if (httpRequest.status === 200) { var res = JSON.parse(httpRequest.responseText); userListData = res; res.forEach(function (element, index, array) { var tr = newElement("tr"); tr.appendChild(newElement("td")).appendChild(newElement("a", {href : "#", class : "linkshowuser", rel : element.username, innerHTML : element.username, onclick : onClickValue("showUserInfoObject", [element])})); tr.appendChild(newElement("td", {innerHTML : element.email})); tr.appendChild(newElement("td")).appendChild(newElement("a", {href : "#", class : "linkshowuser", rel : element._id, innerHTML : "delete", onclick : onClickValue("showUserInfo", [element.username])})); document.getElementById("tbody").appendChild(tr); }); } else alert('There was a problem with the request.'); } } catch (e) { alert('Caught Exception: ' + e.description); } }; httpRequest.open('GET', '/users/userlist'); httpRequest.send(); }; function newElement (type, attrs) { var element = document.createElement(type); for(var a in attrs) { if(attrs[a] === attrs.onclick) element.setAttribute("onclick", attrs[a]); else element[a] = attrs[a]; } return element; } function findUserByName (username) { for (var i in userListData) if (userListData[i].username == username) return userListData[i]; } function onClickValue (functionName, args) { args = args.map(function (arg) { switch (typeof arg) { case "string": return "\'" + arg + "\'"; case "object": return JSON.stringify(arg); case "number": return arg; case "boolean": return arg; case "undefined": return arg; } }); functionName += '('; for(var arg in args) functionName += args[arg]; return functionName + ')'; } function showUserInfo (username) { console.log("Delete?", findUserByName(username)); } function showUserInfoObject (user) { console.log("UserName", user); } 中调用onCreateOptionsMenu(),因此不会调用setHasOptionsMenu(true)

您可以从onCreateView()

中删除此代码
onCreateView()

完成所有这些之后。您可以轻松地将mToolbar = (Toolbar) v.findViewById(R.id.toolbar); mToolbar.inflateMenu(R.menu.menu_main); mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { onOptionsItemSelected(item); return false; } }); 实施用于搜索视图。

希望它有所帮助。 干杯!