Я пытаюсь создать класс, который может задавать вопросы из репозитория и предоставлять ответы из другого репозитория с помощью InLineKeyboard. У меня есть много ответов на каждый вопрос, я могу получить их с помощью Preicate var Answers = answerRepository.findAll(new AnswerSpecification(model)); (уже работает нормально). Проблема в том, что цикл создает клавиатуру.
Я хочу, чтобы он строился в зависимости от того, сколько ответов есть в репозитории, но не более 3 в строке. Введите здесь описание изображения
Основная проблема заключается в том, что он устанавливает каждый кнопка с первым элементом в списке, как это исправить? Я хочу, чтобы каждая следующая кнопка содержала следующий элемент из репозитория.
Код: Выделить всё
private void askQuestion(Long chatId, Long questionId) {
var question = questionRepository.findById(questionId).get().getText();
SendMessage message = new SendMessage();
message.setChatId(String.valueOf(chatId));
message.setText(question);
InlineKeyboardMarkup markupLine = new InlineKeyboardMarkup();
List rowsInLine = new ArrayList();
List rowInLine = new ArrayList();
var button = new InlineKeyboardButton();
Criteria model = new Criteria("questionId", Operation.EQ, String.valueOf(questionId));
var answers = answerRepository.findAll(new AnswerSpecification(model));
// count of all answers got by questionId
int answers_count = answers.size();
// count of max rows
int rows_count = answers_count / 3;
# for (Answer an : answers) {
# while (rowsInLine.size() < rows_count) {
# while (rowInLine.size() < 3) {
# button.setText(an.getText());
# button.setCallbackData(an.getText());
# rowInLine.add(button);
# }
# rowsInLine.add(rowInLine);
# }
# }**
markupLine.setKeyboard(rowsInLine);
message.setReplyMarkup(markupLine);
executeMessage(message);
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... rd-buttons
Мобильная версия