Я отлаживаю свое приложение, затем я попытался дважды и быстро щелкнуть красивую диалоговую кнопку, и она дважды печатается. Я ожидаю, что даже я дважды щелкнул, она не будет печататься дважды.
Я пробовал коды обработчиков ошибок, но это не сработало.
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();
Я ожидаю, что он не будет печатать дважды, даже если я нажал красивую диалоговую кнопку «ДА».
я думаю, что вы можете просто сделать трюк, как это
создайте переменную счетчика count=0;
. При нажатии кнопки подтвердите условие, чтобы if (count==0)
показать диалог и сделать count = 1
. (при этом диалоговое окно не будет открываться во второй раз) при закрытии диалогового окна снова нажмите count = 0
.
я думаю это сработает
Надеюсь, поможет.
if (count == 0){
count = 1 ;
//showdialog process
}
и прямо перед dismiss()
......
count = 0;
prettyDialog.dismiss();
Я помещаю оператор if в верхнюю часть "prettyDialog.addButton("YES", .." Затем перед "prettyDialog.dismiss();" я помещаю "count = 0;"
Я думаю, вы просто потеряли оператор if (count == 0)!
if (count == 0) { prettyDialog.addButton("YES", ...... } Вот как я это делаю. Это правильно? Можете ли вы показать мне на основе моих кодов, спасибо
я действительно не понимаю, но вы должны поставить оператор if перед строкой, которая показывает диалог
а где ты показал диалог? после нажатия кнопки прослушиватель?
Да, после нажатия кнопки прослушиватель появится диалоговое окно, в котором он проверяет, является ли «ДА или НЕТ». Когда я дважды нажимал кнопку «Да», он будет печататься дважды. Я ожидаю, что не буду печатать дважды. нужно только 1
Да, я устанавливаю count = 1 сразу после оператора if, внутри оператора if находится красивое диалоговое окно YES и onclick. И оно снова не работает. Я также ввожу count = 0 перед prettydialog.dismiss()
как ты это реализовал?