簡體   English   中英

無法將 OnClickListener 添加到對話框中的按鈕

[英]Can't add OnClickListener to a Button in a Dialog

我編寫了一個函數來處理Dialog顯示,但我無法在其中使用OnClickListener 誰能告訴我我的代碼有什么問題?

這是我的功能

private void showInputDialog() {

    final Dialog dialog=new Dialog(MainDashboard.this);
    dialog.setContentView(R.layout.frg_dialog_change_pass);

    btn_save_password=(Button) findViewById(R.id.btn_save_password);
    btn_cancel_pass=(Button) findViewById(R.id.btn_cancel_pass);
    edtOldpass=(EditText) findViewById(R.id.edtOldpass);
    edtNewpass=(EditText) findViewById(R.id.edtNewpass);
    edtConfirmpass=(EditText)findViewById(R.id.edtConfirmpass);

    dialog.show();///Show the dialog.

    btn_save_password.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(MainDashboard.this, "Success", Toast.LENGTH_SHORT).show();
            dialog.cancel();
        }
    });
}

調用Activity.findViewById()將在您的Activity布局中查找View (您通過在onCreate()調用setContentView()設置的那個)。

我猜那些View在你的Dialog布局中,所以你需要在你的Dialog實例上調用findViewById()

btn_save_password = (Button) dialog.findViewById(R.id.btn_save_password);
btn_cancel_pass = (Button) dialog.findViewById(R.id.btn_cancel_pass);
edtOldpass = (EditText) dialog.findViewById(R.id.edtOldpass);
edtNewpass = (EditText) dialog.findViewById(R.id.edtNewpass);
edtConfirmpass = (EditText) dialog.findViewById(R.id.edtConfirmpass);
// Declare this globally above oncreate
private android.app.AlertDialog dialog;

android.app.AlertDialog.Builder alertDialog = new android.app.AlertDialog.Builder(MainDashboard.this);

        LayoutInflater layoutInflater = getLayoutInflater();
        View alertView = layoutInflater.inflate(R.layout.frg_dialog_change_pass, null);
        alertDialog.setView(alertView);
        alertDialog.setCancelable(false);

        Button btn_save_password= (Button) alertView.findViewById(R.id.btn_save_password);

        btn_save_password.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // do your stuff here
            }
        });

        if(dialog !=null)
            dialog.dismiss();

        dialog = alertDialog.create();
        dialog.show();

將您的功能更改為:

private void showInputDialog() {

    final Dialog dialog=new Dialog(MainDashboard.this);
    View view = LayoutInflater.from(MainDashboard.this).inflate(R.layout.frg_dialog_change_pass);
    dialog.setContentView(view);
    btn_save_password=(Button) view.findViewById(R.id.btn_save_password);
    btn_cancel_pass=(Button) view.findViewById(R.id.btn_cancel_pass);
    edtOldpass=(EditText) view.findViewById(R.id.edtOldpass);
    edtNewpass=(EditText) view.findViewById(R.id.edtNewpass);
    edtConfirmpass=(EditText)view.findViewById(R.id.edtConfirmpass);
    dialog.show();///Show the dialog.
    btn_save_password.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(MainDashboard.this, "Success", Toast.LENGTH_SHORT).show();
            dialog.cancel();
        }
    });
}

基本上,您必須將findViewById與用於dialogview使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM