Java 如何立即刷新AlertDialog的内容

Java 如何立即刷新AlertDialog的内容,java,android,android-alertdialog,disabled-control,Java,Android,Android Alertdialog,Disabled Control,这是我的问题。我有一个按钮,它是禁用的,如果没有日期,你目前选择。我的问题是每次我选择日期时,我的程序中的条件都不起作用。如果我选择了所需的日期,则应立即启用该按钮。但在我当前输入所需日期后,该按钮仍处于禁用状态。只有当我按下AlertDialog窗口的外部,然后再次按下将加载AlertDialog的按钮时,它才会工作,按钮将更新,并且按钮已启用 , , 这是我节目的一部分: private void Button(final String bookTitle, final String id

这是我的问题。我有一个按钮,它是禁用的,如果没有日期,你目前选择。我的问题是每次我选择日期时,我的程序中的条件都不起作用。如果我选择了所需的日期,则应立即启用该按钮。但在我当前输入所需日期后,该按钮仍处于禁用状态。只有当我按下AlertDialog窗口的外部,然后再次按下将加载AlertDialog的按钮时,它才会工作,按钮将更新,并且按钮已启用

,

,

这是我节目的一部分:

private void Button(final String bookTitle, final String id) {
    mBorrowed = "not borrowed";

    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
    LayoutInflater inflater = getLayoutInflater();
    View view = inflater.inflate(R.layout.borrow_dialog, (ViewGroup) findViewById(R.id.linearLayout));

    dialogBuilder.setView(view);


    tvScheduleDate = (TextView) view.findViewById(R.id.tvScheduleDate);
    tvReturnDate = (TextView) view.findViewById(R.id.tvReturnDate);
    tvSchedule = (TextView) view.findViewById(R.id.tvSchedule);
    btnRequest = (Button) view.findViewById(R.id.btnRequest);

    final AlertDialog alertDialog = dialogBuilder.create();
    alertDialog.show();
    tvSchedule.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


            Calendar c = Calendar.getInstance();

            year = c.get(Calendar.YEAR);
            month = c.get(Calendar.MONTH);
            day = c.get(Calendar.DAY_OF_MONTH);

            DatePickerDialog datePickerDialog = new DatePickerDialog(Borrow.this, Borrow.this, year, month, day);
            datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());
            c.add(Calendar.DAY_OF_WEEK, 6); //for max date
            datePickerDialog.getDatePicker().setMaxDate(c.getTimeInMillis());
            datePickerDialog.show();


        }
    });

    btnRequest.setEnabled(false);
    if (dayFinal > 0) {
        btnRequest.setEnabled(true);

        btnRequest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final FirebaseUser user = firebaseAuth.getCurrentUser();
            /*

            String format_date = yearFinal + "-" + monthFinal  + "-" + dayFinal ;
            String ids = databaseBorrow.push().getKey();
            String buttonText = btnBorrow.getText().toString();
            BorrowBook borrow = new BorrowBook(ids,buttonText,bookTitle,getPresentDate(format_date),getFutureDate(format_date));
            databaseBorrow.child(ids).setValue(borrow);
            Toast.makeText(getApplicationContext(),"Borrow Successfully",Toast.LENGTH_SHORT).show();*/
                btnRequest.setEnabled(false);
                if (mBorrowed.equals("not borrowed")) {
                    databaseBorrow.child("Borrow").child(user.getUid()).child(id).child("request_type").setValue("sent").addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful()) {
                                databaseBorrow.child("Borrow").child(id).child(user.getUid()).child("request_type").setValue("received").addOnSuccessListener(new OnSuccessListener<Void>() {
                                    @Override
                                    public void onSuccess(Void aVoid) {
                                        btnRequest.setEnabled(true);
                                        mBorrowed = "req_sent";
                                        btnRequest.setText("Cancel Borrowed Request");
                                        //Toast.makeText(Borrow.this,"Request Sent Successfully"+mBorrowed,Toast.LENGTH_SHORT);
                                    }
                                });
                            } else {
                                Toast.makeText(Borrow.this, "Failed request", Toast.LENGTH_SHORT);
                            }
                        }
                    });
                }
                if (mBorrowed.equals("req_sent")) {
                    databaseBorrow.child("Borrow").child(user.getUid()).child(id).removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {
                            databaseBorrow.child("Borrow").child(id).child(user.getUid()).removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
                                @Override
                                public void onSuccess(Void aVoid) {
                                    btnRequest.setEnabled(true);
                                    mBorrowed = "not borrowed";
                                    btnRequest.setText("Send Borrowed Request");
                                }
                            });
                        }
                    });
                }
            }
        });
    }
}
private void按钮(最终字符串书名,最终字符串id){
mBorrowed=“未借用”;
AlertDialog.Builder dialogBuilder=新建AlertDialog.Builder(此);
LayoutInflater充气机=getLayoutInflater();
视图=充气机。充气(R.layout.borrow_对话框,(视图组)findViewById(R.id.linearLayout));
dialogBuilder.setView(视图);
tvScheduleDate=(TextView)view.findViewById(R.id.tvScheduleDate);
tvReturnDate=(TextView)view.findViewById(R.id.tvReturnDate);
tvSchedule=(TextView)view.findViewById(R.id.tvSchedule);
btnRequest=(按钮)view.findViewById(R.id.btnRequest);
final AlertDialog AlertDialog=dialogBuilder.create();
alertDialog.show();
tvSchedule.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Calendar c=Calendar.getInstance();
年份=c.get(日历年);
月=c.get(日历月);
day=c.get(日历,每月的第天);
DatePickerDialog DatePickerDialog=新的DatePickerDialog(借入.this,借入.this,年,月,日);
datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());
c、 添加(Calendar.DAY,6);//以获取最大日期
datePickerDialog.getDatePicker().setMaxDate(c.getTimeInMillis());
datePickerDialog.show();
}
});
btnRequest.setEnabled(false);
如果(dayFinal>0){
btnRequest.setEnabled(true);
btnRequest.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
最终FirebaseUser用户=firebaseAuth.getCurrentUser();
/*
字符串格式_date=yearFinal+“-”+monthFinal+“-”+dayFinal;
String id=databaseBorrow.push().getKey();
字符串buttonText=btnBorrow.getText().toString();
借阅簿借阅=新借阅簿(ID、buttonText、bookTitle、getPresentDate(格式\日期)、getFutureDate(格式\日期));
databaseBorrow.child(id).setValue(borrow);
Toast.makeText(getApplicationContext(),“借用成功”,Toast.LENGTH\u SHORT.show()*/
btnRequest.setEnabled(false);
如果(mBorrowed.equals(“非借用”)){
databaseBorrow.child(“借用”).child(user.getUid()).child(id).child(“请求类型”).setValue(“发送”).addOnCompleteListener(新OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
databaseBorrow.child(“借用”).child(id).child(user.getUid()).child(“请求类型”).setValue(“接收”).addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时公开作废(作废避免){
btnRequest.setEnabled(true);
mBorrowed=“已发送请求”;
btnRequest.setText(“取消借用请求”);
//Toast.makeText(借用.this,“请求发送成功”+mBorrowed,Toast.LENGTH\u SHORT);
}
});
}否则{
Toast.makeText(借用.this,“请求失败”,Toast.LENGTH\u SHORT);
}
}
});
}
如果(mBorrowed.equals(“请求发送”)){
databaseBorrow.child(“借用”).child(user.getUid()).child(id).removeValue().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时公开作废(作废避免){
databaseBorrow.child(“借用”).child(id).child(user.getUid()).removeValue().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时公开作废(作废避免){
btnRequest.setEnabled(true);
mBorrowed=“未借用”;
btnRequest.setText(“发送借用请求”);
}
});
}
});
}
}
});
}
}

DatePickerDialog

像这样:

DatePickerDialog datePickerDialog = new DatePickerDialog(Borrow.this, Borrow.this, year, month, day);
            datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());
            c.add(Calendar.DAY_OF_WEEK, 6); //for max date
            datePickerDialog.getDatePicker().setMaxDate(c.getTimeInMillis());
            datePickerDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                btnRequest.setEnabled(true);
            }
        });
        datePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                btnRequest.setEnabled(false);
            }
        });
            datePickerDialog.show();
final DatePicker datePicker = new DatePicker(mActivity);
        datePicker.setMinDate(Calendar.getInstance().getTimeInMillis());
        new AlertDialog.Builder(mActivity)
                .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.d("Picker", datePicker.getDayOfMonth() + " : " + datePicker.getMonth() + " : " + datePicker.getYear());

                        btnRequest.setEnabled(true);
                    }
                })
                .setNegativeButton(R.string.cancel,
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                                int which) {
                                btnRequest.setEnabled(false);
                            }
                        }).setView(datePicker).show();

您可以使用DatePicker而不是使用DatapickerDialogue

private void Button(final String bookTitle, final String id) {
    mBorrowed = "not borrowed";

    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
    LayoutInflater inflater = getLayoutInflater();
    View view = inflater.inflate(R.layout.borrow_dialog, (ViewGroup) findViewById(R.id.linearLayout));

    dialogBuilder.setView(view);


    tvScheduleDate = (TextView) view.findViewById(R.id.tvScheduleDate);
    tvReturnDate = (TextView) view.findViewById(R.id.tvReturnDate);
    tvSchedule = (TextView) view.findViewById(R.id.tvSchedule);
    btnRequest = (Button) view.findViewById(R.id.btnRequest);

    final AlertDialog alertDialog = dialogBuilder.create();
    alertDialog.show();
    tvSchedule.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


            Calendar c = Calendar.getInstance();

            year = c.get(Calendar.YEAR);
            month = c.get(Calendar.MONTH);
            day = c.get(Calendar.DAY_OF_MONTH);

            DatePickerDialog datePickerDialog = new DatePickerDialog(Borrow.this, Borrow.this, year, month, day);
            datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());
            c.add(Calendar.DAY_OF_WEEK, 6); //for max date
            datePickerDialog.getDatePicker().setMaxDate(c.getTimeInMillis());
            datePickerDialog.show();


        }
    });

    btnRequest.setEnabled(false);
    if (dayFinal > 0) {
        btnRequest.setEnabled(true);

        btnRequest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final FirebaseUser user = firebaseAuth.getCurrentUser();
            /*

            String format_date = yearFinal + "-" + monthFinal  + "-" + dayFinal ;
            String ids = databaseBorrow.push().getKey();
            String buttonText = btnBorrow.getText().toString();
            BorrowBook borrow = new BorrowBook(ids,buttonText,bookTitle,getPresentDate(format_date),getFutureDate(format_date));
            databaseBorrow.child(ids).setValue(borrow);
            Toast.makeText(getApplicationContext(),"Borrow Successfully",Toast.LENGTH_SHORT).show();*/
                btnRequest.setEnabled(false);
                if (mBorrowed.equals("not borrowed")) {
                    databaseBorrow.child("Borrow").child(user.getUid()).child(id).child("request_type").setValue("sent").addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful()) {
                                databaseBorrow.child("Borrow").child(id).child(user.getUid()).child("request_type").setValue("received").addOnSuccessListener(new OnSuccessListener<Void>() {
                                    @Override
                                    public void onSuccess(Void aVoid) {
                                        btnRequest.setEnabled(true);
                                        mBorrowed = "req_sent";
                                        btnRequest.setText("Cancel Borrowed Request");
                                        //Toast.makeText(Borrow.this,"Request Sent Successfully"+mBorrowed,Toast.LENGTH_SHORT);
                                    }
                                });
                            } else {
                                Toast.makeText(Borrow.this, "Failed request", Toast.LENGTH_SHORT);
                            }
                        }
                    });
                }
                if (mBorrowed.equals("req_sent")) {
                    databaseBorrow.child("Borrow").child(user.getUid()).child(id).removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {
                            databaseBorrow.child("Borrow").child(id).child(user.getUid()).removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
                                @Override
                                public void onSuccess(Void aVoid) {
                                    btnRequest.setEnabled(true);
                                    mBorrowed = "not borrowed";
                                    btnRequest.setText("Send Borrowed Request");
                                }
                            });
                        }
                    });
                }
            }
        });
    }
}
像这样:

DatePickerDialog datePickerDialog = new DatePickerDialog(Borrow.this, Borrow.this, year, month, day);
            datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());
            c.add(Calendar.DAY_OF_WEEK, 6); //for max date
            datePickerDialog.getDatePicker().setMaxDate(c.getTimeInMillis());
            datePickerDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                btnRequest.setEnabled(true);
            }
        });
        datePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                btnRequest.setEnabled(false);
            }
        });
            datePickerDialog.show();
final DatePicker datePicker = new DatePicker(mActivity);
        datePicker.setMinDate(Calendar.getInstance().getTimeInMillis());
        new AlertDialog.Builder(mActivity)
                .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.d("Picker", datePicker.getDayOfMonth() + " : " + datePicker.getMonth() + " : " + datePicker.getYear());

                        btnRequest.setEnabled(true);
                    }
                })
                .setNegativeButton(R.string.cancel,
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                                int which) {
                                btnRequest.setEnabled(false);
                            }
                        }).setView(datePicker).show();

查看此解决方案可能会有所帮助我已经看到了此线程,但它没有显示我想要的任何解决方案。如果您谈论的是
btnRequest
,当然它将保持禁用状态,因为您没有回调方法或事件来启用按钮<代码>如果语句从未触发。尝试在
DatePickerDialog
上实现
OnDateSetListener
,并在用户设置日期时启用内部按钮。@Excalibur请查看我的答案。