代码之家  ›  专栏  ›  技术社区  ›  ahooee

如何在用户单击时更改InlineKeyboardButton标签?

  •  1
  • ahooee  · 技术社区  · 7 年前

    我想在单击后更改由setText()方法初始化的InlineKeyboardButton对象的标签

    例如,通过单击按钮将“label”字符串更改为“label-1”。

    这是我的一段代码:

    if (update.hasMessage() && update.getMessage().hasText()) {
        if (update.getMessage().getText().equals("/start")) {
            long chat_id = update.getMessage().getChatId();
            message = new SendMessage() 
                    .setChatId(chat_id)
                    .setText("You send /start");
            InlineKeyboardButton dk1=new InlineKeyboardButton().setText("labe1").setCallbackData("change_the_label");
            InlineKeyboardMarkup markupInline = new InlineKeyboardMarkup();
            List<List<InlineKeyboardButton>> rowsInline = new ArrayList<>();
            List<InlineKeyboardButton> rowInline = new ArrayList<>();
            rowInline.add(dk1);
            rowsInline.add(rowInline);
            markupInline.setKeyboard(rowsInline);
            message.setReplyMarkup(markupInline);
            try {execute(message); catch (TelegramApiException e) {e.printStackTrace();}}}
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   ahooee    7 年前

    我通过添加这段代码解决了这个问题 使用EditMessageReplyMarkup对象的 要编辑现有内联键盘,请执行以下操作:

       String call_data = update0.getCallbackQuery().getData();
                long message_id = update0.getCallbackQuery().getMessage().getMessageId();
                long chat_id = update0.getCallbackQuery().getMessage().getChatId();
                String inline_message_id = update0.getCallbackQuery().getInlineMessageId();
                if (call_data.equals("change_the_label")) {
                    String answer = "Updated message text";
                    EditMessageReplyMarkup new_message = new EditMessageReplyMarkup()
                            .setChatId(chat_id).setMessageId(toIntExact(message_id))
                            .setInlineMessageId(inline_message_id);
                    InlineKeyboardButton dk1=new InlineKeyboardButton();
                    dk1.setText("label1");
                    dk1.setCallbackData("change_the_label");
                    InlineKeyboardMarkup markupInline = new InlineKeyboardMarkup();
                    List<List<InlineKeyboardButton>> rowsInline = new ArrayList<>();
                    List<InlineKeyboardButton> rowInline = new ArrayList<>();
    
                    rowInline.add(dk1);
    
                    rowsInline.add(rowInline);
    
                    markupInline.setKeyboard(rowsInline);
                    new_message.setReplyMarkup(markupInline);
    
                                    try {editMessageReplyMarkup(new_message);
    
                    } catch (TelegramApiException e) {
                        e.printStackTrace();
                    }