2013-04-30 93 views
0

我的Android应用程序显示AlertDialog,并且第一次通过时一切正常。但是,显示然后取消对话框后,第二次在show()上崩溃。我尝试了类似帖子中的建议,但没有任何帮助。这是我的代码:为什么AlertDialog.dialog.show()第二次崩溃?

addButton.setOnClickListener(this); 
} 

@Override 
public void onClick (View view) { 
    switch (view.getId()) { 
    case R.id.config_add: 
     builder = new AlertDialog.Builder(this); 
     builder.setTitle(R.string.create_content_server_config_title); 
     builder.setView(config_view); 
     builder.setPositiveButton(R.string.dialog_confirm_create_config_button, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       // User clicked Create button 
       Toast.makeText(ManageContentServers.this, config_name.getText().toString(), Toast.LENGTH_LONG).show(); 
      } 
     }); 
     builder.setNegativeButton(R.string.dialog_config_cancel_button, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       // User cancelled the dialog 
       dialog.dismiss(); 
      } 
     }); 
     dialog = builder.create(); 
     dialog.show(); 
     break; 
    } 
} 

回答

0

它是因为你使用“setView”。每次都需要重新创建对话框!

private void showDialog() { 
    builder = new AlertDialog.Builder(this); builder.setTitle(R.string.create_content_server_config_title); builder.setView(config_view); builder.setPositiveButton(R.string.dialog_confirm_create_config_button, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         // User clicked Create button 
         Toast.makeText(ManageContentServers.this, config_name.getText().toString(), Toast.LENGTH_LONG).show(); 
        } 
       }); 
       builder.setNegativeButton(R.string.dialog_config_cancel_button, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         // User cancelled the dialog 
         dialog.dismiss(); 
        } 
        }); 
        dialog = builder.create(); 
        dialog.show(); 
     } 


    case R.id.config_add: 
    showDialog(); 
    break; 
0

我不知道,如果你说同样的事情,但我从onCreate()方法来的onClick(移动

config_view = inflater.inflate(R.layout.ecs_config_fields, null); 

更轻松地解决了这一问题),就在builder.setView(config_view);