如何处理搜索管理器的回调?
-
02-10-2019 - |
题
让我们假设以下内容:
Activity A calls Search Manager
User searches, and search results are displayed in Activity B
User clicks on a list item in Activity B
App switches back to Activity A
我无法处理从活动B到活动A的回调,因为我没有搜索经理的意图(我认为?)。
致电搜索管理器(在活动A中)
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.add_symbol:
onSearchRequested(); //result of search will show Activity B
return true;
default:
return super.onOptionsItemSelected(item);
}
}
在用户选择列表项目后返回活动A
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Quote myQuote = new Quote();
myQuote.name = (companies.get(position).name);
myQuote.symbol = (companies.get(position).symbol);
//TODO: add new quote to master quote list in Main
//TODO: serialize in Main
//TODO: go back to last activity
Intent myIntent = new Intent(getApplicationContext(), Main.class);
startActivityForResult(myIntent, PICK_COMPANY_REQUEST);
}
});
在活动中处理回电:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PICK_COMPANY_REQUEST) {
if (resultCode == RESULT_OK) {
Toast toast = Toast.makeText(getApplicationContext(), "Stock added", Toast.LENGTH_SHORT);
toast.show();
}
}
}
这 PICK_COMPANY_REQUEST
永远不会发送回电话。为什么是这样?我之所以假设是因为搜索管理器具有意图,而不是活动B。如何确保被调用?
onActivityResult()从未被调用。为什么?
解决方案
我真的怀疑您是否需要为您的Onclicklistener上的主要活动呼吁新意图。由于该活动已经在堆栈中,您可以完成
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Quote myQuote = new Quote();
myQuote.name = (companies.get(position).name);
myQuote.symbol = (companies.get(position).symbol);
//TODO: add new quote to master quote list in Main
//TODO: serialize in Main
//TODO: go back to last activity
//You need to use setresult here and pass the intent
setResult(RESULT_OK, myIntent );
finish();
}
});
其他提示
我在我认为是同一问题的答案中发布了一个答案 Android OnSearchRequested()回调为调用活动
天空是对的 onActivityResult
不称呼,因为活动A不会启动结果的搜索活动。
为了解决这个问题,我将活动定义为可搜索的活动(在清单中),以便它接收搜索意图,然后用手动启动活动B startActivityForResult
, ,通过查询并让活动B正常处理搜索。
您可以在上面的链接上看到我的回答,或者我有一个 在此博客文章中更详细的文章.
没有调用onActivityResult,因为没有使用StartActivityForresult来启动搜索活动。我也遇到了这个问题,尚未找到解决方案!
不隶属于 StackOverflow