Activity 意图 child 没有 return 数据到 parent,toast 没有显示

Activity intent child doesn't return data to parent, toast is not shown

各位程序员大家好,

我在理解为什么我的 child 的意图没有 return 正确的价值来正确地理解我的 parent 的意图时遇到了一些问题。

private static final int REQUEST_CODE_CHEAT = 0;

下面是我如何称呼我的明确意图

mButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        boolean isTrue = mStatements[mStatementIndex].isAnswerTrue();
        Intent intent = SubActivity.newIntent(MainActivity.this, isTrue);
        startActivityForResult(intent, REQUEST_CODE_CHEAT);
    }
});

这是创建接口 Intent 的 SubActivity 的代码

public static Intent newIntent(Context packageContext, boolean answerIsTrue){
    Intent intent = new Intent(packageContext, SubActivity.class);
    intent.putExtra(EXTRA_ANSWER_SHOWN, answerIsTrue);
    return intent;
}

此外,使用以下键可以跟踪发生的事情

private static final String EXTRA_ANSWER_IS_TRUE = "com.tsourtzis.android.test.answer_is_true";
private static final String EXTRA_ANSWER_SHOWN = "com.tsourtzis.android.test.answer_shown";

终于有一些方法可以确定传递的值

private void setAnswerShownResult(boolean isAnswerShown){
    Intent data = new Intent();
    data.putExtra(EXTRA_ANSWER_IS_TRUE, isAnswerShown);
    setResult(RESULT_OK, data);
}

在这里,我使用 setResult() 将意图发送回 MainActivity;

public static boolean wasAnswerShown(Intent result){
    return result.getBooleanExtra(EXTRA_ANSWER_SHOWN, false);
}

此外,我这里有这个方法来评估结果,但首先检查用户是否创建了它。

public void evaluateStatement(boolean userChoice){
    boolean statementValue = mStatements[mStatementIndex].isAnswerTrue();

    int textResId = 0;

    if(mBoolResult){
        textResId = R.string.judgment_toast;
    }else{
        if(userChoice == statementValue){
            textResId = R.string.correct_toast;
        }else{
            textResId = R.string.incorrect_toast;
        }
    }

    Toast.makeText(this, textResId, Toast.LENGTH_SHORT).show();
}

注意,在使用 setResult(...) 和一个字段值以保持来自 Sub activity.

的布尔结果后,我已经声明了以下我的 MainActivity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
    if(resultCode != Activity.RESULT_OK){
        return;
    }

    if(requestCode == REQUEST_CODE_CHEAT){
        if(data == null){
            return;
        }

        mBoolResult = SubActivity.wasAnswerShown(data);
    }
}

最后澄清一下,这是我在 MainActivity 中的字段。

private boolean mBoolResult;

我不是在寻找任何代码答案,我只是想了解为什么它不起作用。谢谢!

finish() 你的 SubActivity 吗?

看到 Toast 应该在任何时候调用方法 evaluateStatement 时显示,我猜想 onActivityResult 不会将调用分派给它。

你能明确指出你最后显示的 onActivityResult 在哪里吗?不清楚,因为它正在调用 CheatActivity#wasAnswerShown() 就好像它不在 CheatActivity 中一样(MainActivity?)