繁体   English   中英

startActivityForResult:finish()返回错误的活动

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM