我创建了一个具有自定义建议功能的应用。 MainActivity
将显示项目列表,并且还有一个SearchView
来搜索列表中的内容。当用户在SearchView
上放置内容时,将显示建议列表。当我单击其中一个建议时,它会将建议中的意图数据发送到可搜索的活动(SearchActivity
)。在此活动中,它会检查Intent是来自ACTION_SEARCH
还是ACTION_VIEW
。如果ACTION_SEARCH
,则会在此活动中显示查询。否则,它会发送Intent以打开DetailsActivity
。在DetailsActivity
中,用户可以删除此项。当用户点击删除按钮时,DetailsACtivity
会将意图结果发送到MainActivity
,跳过SearchActivity
(我在SearchActivity
发送意图时使用完成以打开DetailsActivity
)。我的代码没有显示错误,但我的项目没有被删除,为什么意图结果不起作用?
以下是我的代码段
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();
}
});
答案 0 :(得分:0)
您需要使用结果转发。
MainActivity
使用SearchActivity
startActivityForResult()
SearchActivity
应该像这样启动DetailsActivity
:
Intent intent = new Intent(this, DetailsActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(intent);
finish();
这告诉框架DetailsActivity
的结果应该返回MainActivity
。
注意您使用DetailsActivity
启动startActivity()
而使用startActivityForResult()
启动 ;