Java startActivityForResult:finish()返回到错误的活动
所以我有3个活动:Main活动、AddEntryActivity和CategoryActivity。我想使用Main->AddEntry中的startractivityforresult,然后使用AddEntry->Category,并将Category中的数据传递回AddEntry,在那里它被用作我发送回Main的输入对象结果中的字段。问题是,当我在AddEntryActivity中调用finish()时(从CategoryActivity返回后),CategoryActivity再次打开。我认为这可能是意图/上下文的问题,但我是android开发新手,所以我不知道问题出在哪里。任何帮助都将不胜感激 我目前正在从MainActivity(按按钮)调用startActivityForResult()以访问AddEntryJava startActivityForResult:finish()返回到错误的活动,java,android,Java,Android,所以我有3个活动:Main活动、AddEntryActivity和CategoryActivity。我想使用Main->AddEntry中的startractivityforresult,然后使用AddEntry->Category,并将Category中的数据传递回AddEntry,在那里它被用作我发送回Main的输入对象结果中的字段。问题是,当我在AddEntryActivity中调用finish()时(从CategoryActivity返回后),CategoryActivity再次打开。我
case R.id.addEntryButton:
Intent in = new Intent(this, AddEntryActivity.class);
startActivityForResult(in, 111);
break;
然后从AddEntryActivity调用另一个startActivityForResult以进入CategoryActivity(再次按下按钮)
从CategoryActivity,用户可以选择一个类别并将其发送回AddEntryActivity(我已经检查过这是否有效)
在类别活动中:
@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();
}
@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中:
@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();
}
@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中,当按下确认按钮时,我希望返回到MainActivity,其中包含从CategoryActivity返回的category字段的新条目对象。所以我有这个:
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();
问题是,当按下确认按钮时,类别活动屏幕再次弹出。奇怪的是,MainActivity(如下)中的onActivityResult方法实际上运行起来就像通过back按钮关闭CategoryActivity屏幕一样,您可以看到entry对象已经添加,所以我似乎无法找出是什么导致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);
}
}
检查您的switch case语句,确保它没有遗漏一个中断并进入下一部分。尝试在
确认按钮中使用Intent main=new Intent()
(而不是Intent(this,MainActivity.class)
)。另外,请检查您是否有开关案例中所有案例的break
语句(您发布的confirmEntryButton
代码中没有显示),但这可能只是复制粘贴错误。如果它不在那里,它可能也会落入chooseCategory
案例中。@TylerV非常感谢您!break语句修复了它:)太好了!我把它作为一个答案加上去了。