gpt4 book ai didi

java - Activity Intent 子级不向父级返回数据,不显示 toast

转载 作者:行者123 更新时间:2023-12-01 21:16:20 24 4
gpt4 key购买 nike

各位程序员大家好,

我在理解为什么我 child 的 Intent 没有正确返回我 parent 的 Intent 的正确值时遇到了一些问题。

private static final int REQUEST_CODE_CHEAT = 0;

现在这是我如何称呼我的明确 Intent

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);
}
});

这是创建接口(interface) 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() 将 Intent 发送回 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(...) 后声明了以下 MainActivity 以及用于保留 Sub Activity 的 boolean 结果的字段值。

@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了吗?

看到只要调用方法 evaluateStatement 就应该显示 Toast,我猜 onActivityResult 不会分派(dispatch)对它的调用。

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

关于java - Activity Intent 子级不向父级返回数据,不显示 toast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58872475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com