Я пишу класс, в котором есть определенные переменные, которые не нужно устанавливать, за исключением некоторых дополнительных случаев. Таким образом, я работаю над написанием метода requestVariable (), который запрашивает ввод данных пользователем для установки этой переменной, когда это необходимо. Однако я изо всех сил пытаюсь понять, как дождаться этого ввода, прежде чем двигаться дальше. Позвольте мне показать вам, что у меня есть.
SkillApplication AR_D_Atk_Def_1_app = (Unit) -> {
if (Unit.getAttackStatus() != com.codecademy.myapplication.Unit.AttackStatus.DEFENDER) {
return;
}
else {
// Make sure structuresAR is set
Unit.setStructuresAR(requestVariable( /* some parameters */ );
int X;
if (Unit.getStructuresAR() >= 5) {
X = 4;
}
else if (Unit.getStructuresAR() == 4) {
X = 3;
}
else if (Unit.getStructuresAR() == 3) {
X = 2;
}
else {
X = 1;
}
Unit.addCombatAtk(X);
Unit.addCombatDef(X);
}
};
Это лямбда-функция для приложения определенного навыка. Если нужно применить этот навык, он запустит эту лямбда-функцию. Это один из крайних случаев, когда необходимо использовать член "structureAR" модуля Unit. Он используется очень редко, и вместо того, чтобы каждый раз устанавливать его пользователем, я установил его в этой лямбда-функции.
VariableRequest<Integer> requestInteger = (VariableRequest<Integer>) (questionMessage, choices, layout) -> {
final Integer[] retVal = new Integer[1];
TextView questionView = new TextView(layout.getContext());
questionView.setText(questionMessage);
EditText textEntry = new EditText(layout.getContext());
textEntry.setInputType(InputType.TYPE_CLASS_NUMBER);
Button submitButton = new Button(layout.getContext());
submitButton.setText("Submit");
layout.addView(questionView);
layout.addView(textEntry);
layout.addView(submitButton);
submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
retVal[0] = Integer.parseInt(String.valueOf(textEntry.getText()));
}
});
};
Вот что я написал для этой функции. Он устанавливает вопрос, параметры и кнопку отправки в макет, который обновляет возвращаемое значение тем, что находится в поле ввода при нажатии кнопки.
Эта проблема в том, что это просто продолжается. Остальная часть того, что я написал, будет выполняться, пока onClickListener все еще существует, и я не знаю, как ждать, пока он не будет нажат. Я исхожу из знаний C ++, где просто написание cin >> variable приостановит и подождет, пока вы войдете. Я пытаюсь воспроизвести это с помощью кнопки.
Есть и другие проблемы, которые я могу обнаружить с этим, например, получение макета изнутри метода stati c, но мне трудно придумать другой метод, как Я новичок в разработке Android.