我在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);
}
答案 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;
}
});
实施用于搜索视图。
希望它有所帮助。 干杯!