2016-09-15 121 views
-2

我已经编写了一个函数来处理Dialog的显示,但我无法在其中使用OnClickListener。我的代码有什么问题可以告诉我吗?无法将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(); 
     } 
    }); 
} 

回答

4

调用Activity.findViewById()将寻找ViewActivity布局(一个你已经通过调用onCreate()setContentView()设置)。

我猜那些View s为你Dialog布局,所以你需要调用findViewById()Dialog实例:

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); 
0
// 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(); 
0

更改功能:

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(); 
     } 
    }); 
} 

基本上你必须使用findViewByIdview用于dialog

相关问题