Как исправить «двойную печать при двойном нажатии на красивую кнопку диалогового окна»

Я отлаживаю свое приложение, затем я попытался дважды и быстро щелкнуть красивую диалоговую кнопку, и она дважды печатается. Я ожидаю, что даже я дважды щелкнул, она не будет печататься дважды.

Я пробовал коды обработчиков ошибок, но это не сработало.

prettyDialog.addButton("YES",
R.color.navy_blue,
R.color.gold_yellow,
new PrettyDialogCallback() {
    @Override
    public void onClick() {

        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {

                raw_serial = String.valueOf(Build.SERIAL);
                serial_final = raw_serial.substring(raw_serial.length() - 7);

                nf = new DecimalFormat("000000");

                DateFormat dateFormat = new SimpleDateFormat("MMddyyyy");
                Date date = new Date();
                ticket_date = dateFormat.format(date).toString();

                DateFormat datetimeformat = new SimpleDateFormat("HHmmss");
                Date time = new Date();

                ticket_time = datetimeformat.format(time).toString();
                transaction_no = serial_final + ticket_date + ticket_time + nf.format(setting_last_transaction_no);
                trace_no = merchant_code + serial_final + ticket_date + ticket_time + nf.format(ref_trace_no);
                print_card_no = Cardno.substring(Cardno.length() - 4);
                String print_balance;
                print_balance = "P" + String.valueOf(Balance);
                int balancespace = 0;
                int balancelength = 0;
                balancelength = print_balance.length();
                balancespace = 13 - balancelength;
                for (int j = 0; j < balancespace; j++) {
                    print_balance = " " + print_balance;
                }
                int print = PrinterInterface.open();
                Log.e("print", String.valueOf(print));
                int querystatus = PrinterInterface.queryStatus();
                Log.e("querystatus", String.valueOf(querystatus));
                DateFormat dateformatforprint = new SimpleDateFormat("MMM.dd,yyyy");
                Date dateformatprint = new Date();
                String datetoprint = dateformatforprint.format(dateformatprint).toString();
                DateFormat timeformattoprint = new SimpleDateFormat("HH:mm");
                Date timeformat = new Date();
                String timetoprint = timeformattoprint.format(timeformat).toString();
                String finalStation = "";
                Log.e("asdasd", "asdasd");
                if (print >= 0) {
                    byte[] arryTitle = null;
                    byte[] arryTrx = null;
                    byte[] arrySubtitle = null;
                    byte[] arryBody1 = null;
                    byte[] arryspace1 = null;
                    byte[] arryFooter = null;
                    //test
                    try {
                        arryTitle = ("\n" + "TRIPKO" + "\n" + "\n").getBytes("UTF-8");
                        arryTrx = ("TRX: " + transaction_no + "\n" +
                                trace_no + "\n").getBytes("UTF-8");
                        arrySubtitle = ("Date & Time  : " + datetoprint + " " + timetoprint + "\n" +
                                "Merchant Name: " + subcompany_name.toUpperCase() + "\n" +
                                "Branch       : " + terminal_name.toUpperCase() + "\n" +
                                "-------------------------------" + "\n" +
                                "\n").getBytes("UTF-8");
                        arryBody1 = ("Card No. : " + "  **** **** **** " + print_card_no + "\n" +
                                "Trans Type : " + "    " + type_name.toUpperCase() + "\n" +
                                "Current Balance  : " + print_balance + "\n" +
                                "-------------------------------" + "\n" +
                                "\n").getBytes("UTF-8");
                        arryFooter = ("Customer Service" + "\n"
                                + "Hotline#: TRIPKO(678-1234)" + "\n" +
                                "\n").getBytes("UTF-8");
                        arryspace1 = "\n".getBytes("UTF-8");
                    } catch (Throwable e) {

                        e.printStackTrace();
                    }
                    begin();
                    if (querystatus == 1) {

                        writeLineBreak(20);
                        write(arryspace1);
                        alignment(1);
                        Fontsize(16);
                        boldFont(2);
                        doublewidth();
                        write(arryTitle);
                        backtonormal();
                        nextline();

                        Fontsize(0);
                        write(arryTrx);
                        alignment(0);
                        write(arrySubtitle);
                        write(arryBody1);

                        alignment(1);
                        write(arryFooter);
                        write(arryspace1);
                        write(arryspace1);
                        write(arryspace1);
                        write(arryspace1);

                        insertData(company_id,
                                subcompany_id,
                                terminal_id,
                                setting_control_no,
                                Cardno,
                                Balance,
                                transaction_no,
                                trace_no,
                                device_serial);
                        setting_last_transaction_no += 1;
                        ref_trace_no += 1;
                        updateTicket(String.valueOf(setting_last_transaction_no),
                                String.valueOf(ref_trace_no));
                        DBBackup();
                        end();
                        btnCheckBalance.setEnabled(true);
                        btnCheckBalance.setClickable(true);
                        Intent intent2 = new Intent(getContext(), UpdateSendingServices.class);
                        getActivity().startService(intent2);
                    } else {
                        //OpenNoPaper();
                    }
                }
                PrinterInterface.close();
            }
        });
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                totalBalance.setText("P 0.00");
                btnCheckBalance.setEnabled(true);
                btnCheckBalance.setClickable(true);
            }
        });

        prettyDialog.dismiss();
    }
})
.show();

Я ожидаю, что он не будет печатать дважды, даже если я нажал красивую диалоговую кнопку «ДА».

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

я думаю, что вы можете просто сделать трюк, как это

создайте переменную счетчика count=0;. При нажатии кнопки подтвердите условие, чтобы if (count==0) показать диалог и сделать count = 1. (при этом диалоговое окно не будет открываться во второй раз) при закрытии диалогового окна снова нажмите count = 0.

я думаю это сработает

Надеюсь, поможет.

if (count == 0){
count = 1 ;
//showdialog process
} 

и прямо перед dismiss()

  ......
  count = 0; 
  prettyDialog.dismiss();

как ты это реализовал?

ismail alaoui 28.05.2019 05:41

Я помещаю оператор if в верхнюю часть "prettyDialog.addButton("YES", .." Затем перед "prettyDialog.dismiss();" я помещаю "count = 0;"

Macky 28.05.2019 06:02

Я думаю, вы просто потеряли оператор if (count == 0)!

ismail alaoui 28.05.2019 06:11

if (count == 0) { prettyDialog.addButton("YES", ...... } Вот как я это делаю. Это правильно? Можете ли вы показать мне на основе моих кодов, спасибо

Macky 28.05.2019 06:13

я действительно не понимаю, но вы должны поставить оператор if перед строкой, которая показывает диалог

ismail alaoui 28.05.2019 06:15

а где ты показал диалог? после нажатия кнопки прослушиватель?

ismail alaoui 28.05.2019 06:18

Да, после нажатия кнопки прослушиватель появится диалоговое окно, в котором он проверяет, является ли «ДА или НЕТ». Когда я дважды нажимал кнопку «Да», он будет печататься дважды. Я ожидаю, что не буду печатать дважды. нужно только 1

Macky 28.05.2019 06:22

Да, я устанавливаю count = 1 сразу после оператора if, внутри оператора if находится красивое диалоговое окно YES и onclick. И оно снова не работает. Я также ввожу count = 0 перед prettydialog.dismiss()

Macky 28.05.2019 07:51

Другие вопросы по теме

Проблемы с интеграцией пространственных привязок Azure. Отсутствующие реализации NativeLibrary
Autocompletetextview return Параметр, указанный как ненулевой, имеет значение null
Ошибки заголовка выбора текста
Получить изображение из CameraPreview
Содержимое Recycler удваивается каждый раз, когда фрагмент добавляется в диспетчер фрагментов, даже если он должен быть очищен
Ошибка сохранения растрового изображения Android. сохранение изображения неверно, обновите галерею после сохранения изображения на SD-карту
Сопрограммы: переопределение диспетчера OKHttp для использования ThreadPoolExecutor AsyncTasks, чтобы Espresso мог успешно утверждать
FirebaseNetworkException нельзя преобразовать в com.google.firebase.auth.FirebaseAuthException
Как я могу масштабировать размер шрифта на основе android displayMetrics?
Базовый модуль RNFirebase изначально не был найден на Android, убедитесь, что вы правильно добавили зависимости RNFirebase и Firebase gradle