因此,我有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中,当按下确认按钮时,我想使用一个包含从CategoryActivity返回的类别字段的新Entry对象返回MainActivity。所以我有这个:
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);
}
}
答案 0 :(得分:0)
检查您的交换机用例声明,确保它没有遗漏任何中断并深入到下一部分。