Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java startActivityForResult:finish()返回到错误的活动_Java_Android - Fatal编程技术网

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

Java startActivityForResult:finish()返回到错误的活动,java,android,Java,Android,所以我有3个活动:Main活动、AddEntryActivity和CategoryActivity。我想使用Main->AddEntry中的startractivityforresult,然后使用AddEntry->Category,并将Category中的数据传递回AddEntry,在那里它被用作我发送回Main的输入对象结果中的字段。问题是,当我在AddEntryActivity中调用finish()时(从CategoryActivity返回后),CategoryActivity再次打开。我

所以我有3个活动:Main活动、AddEntryActivity和CategoryActivity。我想使用Main->AddEntry中的startractivityforresult,然后使用AddEntry->Category,并将Category中的数据传递回AddEntry,在那里它被用作我发送回Main的输入对象结果中的字段。问题是,当我在AddEntryActivity中调用finish()时(从CategoryActivity返回后),CategoryActivity再次打开。我认为这可能是意图/上下文的问题,但我是android开发新手,所以我不知道问题出在哪里。任何帮助都将不胜感激

我目前正在从MainActivity(按按钮)调用startActivityForResult()以访问AddEntry

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语句修复了它:)太好了!我把它作为一个答案加上去了。