[英]startActivityForResult: finish() returning to wrong activity
因此,我有3个活动:MainActivity,AddEntryActivity和CategoryActivity。 我想使用Main-> AddEntry中的startActivityForResult,然后AddEntry-> Category,并将Category中的数据传递回AddEntry,在其中它用作我发送回Main的Entry对象结果中的字段。 问题是,当我在AddEntryActivity中调用finish()时(从CategoryActivity返回之后),CategoryActivity再次打开。 我认为这可能与意图/上下文有关,但我是android dev的新手,所以我不知道是什么问题。 任何帮助,将不胜感激!
我目前正在从MainActivity调用startActivityForResult()(按一下按钮)以进入AddEntry。
case R.id.addEntryButton:
Intent in = new Intent(this, AddEntryActivity.class);
startActivityForResult(in, 111);
break;
然后从AddEntryActivity中,我调用另一个startActivityForResult以转到CategoryActivity(再次按下按钮)。
case R.id.chooseCategory:
Intent catAct = new Intent(this, CategoryActivity.class);
startActivityForResult(catAct, 222);
break;
用户可以从CategoryActivity中选择一个类别,然后将其发送回AddEntryActivity(我已经检查了这是可行的)。
在CategoryActivity中:
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
Intent i = getIntent();
String category = (String) getListAdapter().getItem(position);
i.putExtra("Category", category);
setResult(RESULT_OK, i);
finish();
}
在AddEntryActivity中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 222 && resultCode == RESULT_OK) {
String cat = data.getStringExtra("Category");
category.setText(cat);
categoryString = cat;
}
}
然后,在AddEntryActivity中,当按下确认按钮时,我想使用一个新的Entry对象返回MainActivity,该对象包含从CategoryActivity返回的类别字段。 所以我有这个:
case R.id.confirmEntryButton:
Entry entry = new Entry(descString, amountString, date.getText().toString(), categoryString);
Intent main = new Intent(this, MainActivity.class);
main.putExtra("newEntry", entry);
setResult(RESULT_OK, main);
finish();
问题是,当按下确认按钮时,CategoryActivity屏幕再次弹出。 奇怪的是,MainActivity中的onActivityResult方法(如下)实际上是在您通过后退按钮关闭CategoryActivity屏幕时运行的,您可以看到已添加了输入对象,因此我似乎无法弄清楚是什么原因导致了类别屏幕弹出。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 111 && resultCode == RESULT_OK) {
Entry entry = data.getParcelableExtra("newEntry");
entries.add(entry);
entryListView.setAdapter(eAdapter);
}
}
检查您的交换机用例声明,确保它没有遗漏任何中断并深入到下一部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.