Android 使用自定义对话框时,我的程序崩溃

Android 使用自定义对话框时,我的程序崩溃,android,android-studio,Android,Android Studio,我正在尝试创建自定义对话框,但遇到问题。当我按下显示对话框的按钮时,我的应用程序崩溃 这是我的密码: public class Cartas extends AppCompatActivity { Dialog myDialog; Button senmacho; Button cerrar; @Override protected void onCreate(Bundle savedInstanceState) { super.onC

我正在尝试创建自定义对话框,但遇到问题。当我按下显示对话框的按钮时,我的应用程序崩溃

这是我的密码:

public class Cartas extends AppCompatActivity {

    Dialog myDialog;
    Button senmacho;
    Button cerrar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cartas);

        senmacho = (Button) findViewById(R.id.senmacho);
        senmacho.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                senamacho();
            }
        });
    }

    public void senamacho(){
        myDialog = new Dialog(Cartas.this);
        myDialog.setContentView(R.layout.macho);
        myDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        cerrar = (Button) findViewById(R.id.cerrar);
        cerrar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                myDialog.cancel();
            }
        });
        myDialog.show();
    }
}

更改行
cerrar=(按钮)findviewbyd(R.id.cerrar)
into
cerrar=(按钮)myDialog.findviewbyd(R.id.cerrar)或进入
cerrar=myDialog.findviewbyd(R.id.cerrar)可能会解决此问题

有一个非常基本的错误。 您应该遵循下面的代码

而不是:此:

public void senamacho(){
    myDialog = new Dialog(Cartas.this);
    myDialog.setContentView(R.layout.macho);
    myDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    cerrar = (Button) findViewById(R.id.cerrar);
    cerrar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            myDialog.cancel();
        }
    });
    myDialog.show();
}
使用这个

public void senamacho(){
    myDialog = new Dialog(Cartas.this);
    myDialog.setContentView(R.layout.macho);
    myDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
   //modify the line bellow
    cerrar = (Button) myDialog.findViewById(R.id.cerrar);
    cerrar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            myDialog.cancel();
        }
    });
    myDialog.show();
}

您好,请发布您的日志。在崩溃发生时从控制台添加输出将有所帮助。堆栈跟踪将显示崩溃发生在代码中的哪个位置cerrar按钮在自定义对话框布局中使用时,会在活动布局中声明。因此,如果您的按钮位于
R.layout.macho
中,只需将其更改为
button cerrar=(button)myDialog.findViewById(R.id.cerrar)post错误日志SSO、nullpointerexception,然后