【发布时间】:2015-04-02 23:58:30
【问题描述】:
我创建了一个具有自定义建议功能的应用。 MainActivity 将显示项目列表,并且还有一个 SearchView 用于从列表中搜索某些内容。当用户在SearchView 上放一些东西时,将显示建议列表。当我单击其中一个建议时,它会将建议中的意图数据发送到可搜索的活动 (SearchActivity)。在这个活动中,它将检查 Intent 是来自ACTION_SEARCH 还是ACTION_VIEW。如果ACTION_SEARCH,它将显示此活动中的查询。否则,它会发送 Intent 打开DetailsActivity。在DetailsActivity,用户可以删除该项目。当用户单击删除按钮时,DetailsACtivity 将向MainActivity 发送意图结果,跳过SearchActivity(我在SearchActivity 发送意图打开DetailsActivity 时使用完成)。我的代码没有显示错误,但我的项目没有被删除,为什么意图结果不起作用?
下面是我的代码sn-p
MainActivity.java
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case 12345:
if(resultCode == RESULT_OK) {
int pos = data.getIntExtra("DELETE", -1);
itemList.remove(pos);
mAdapter.notifyItemRemoved(pos);
}
break;
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_search, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
}
SearchActivity.java
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
txtQuery.setText("Search Query: " + query);
} else if (Intent.ACTION_VIEW.equals(intent.getAction())) {
Intent detail = new Intent(this, DetailsActivity.class);
int pos = intent.getIntExtra(SearchManager.EXTRA_DATA_KEY);
intent.putExtra("POS", pos);
startActivityForResult(detail, 12345);
finish();
}
}
DetailsActivity.java
removeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = getIntent().getIntExtra("POS", -1);
Intent intent = new Intent();
intent.putExtra("DELETE", pos);
setResult(RESULT_OK, intent);
finish();
}
});
【问题讨论】:
-
而不是
setResult(RESULT_OK, intent);使用setResult(12345, intent);来接收结果。 -
删除 else 循环中的
finish()方法,如果您正在完成活动,您将如何收到结果... -
还是不行。如果没有
finish(),如果我单击返回按钮而不是跳过它并转到 MainActivity,DetailsActivity 将返回 SearchActivity。 -
先生 stackex 结果将被传递到您调用的活动...您正在从
SearchActivity调用startActivityForResult()并且您正在尝试从 MainActivity 获取结果.. -
啊,没错。您知道如何将项目标识符发送到 MainActivity 以便我可以从 MainActivity 中删除它吗?注意:如果我在 MainActivity 中点击 itemList 中的项目,它将转到 detailsActivity,如果我点击 removeButton,该项目将被优雅地删除。我通过SearchActivity从搜索建议转到DetailsActivity的问题。