0

问候各位程序员,

我一直在理解为什么我孩子的意图没有正确地返回我父母的意图的正确价值方面遇到一些问题。

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 活动的布尔结果之后,说明了以下我的 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;

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

4

1 回答 1

0

你是你finish()SubActivity吗?

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

你能明确onActivityResult你最后展示的地方在哪里吗?目前还不清楚,因为它正在调用CheatActivity#wasAnswerShown(),就好像它不在CheatActivityMainActivity?)

于 2019-11-15T08:30:57.340 回答