Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android studio自定义对话框按钮空对象引用_Java_Android Studio_Dialog_Modal Dialog - Fatal编程技术网

Java Android studio自定义对话框按钮空对象引用

Java Android studio自定义对话框按钮空对象引用,java,android-studio,dialog,modal-dialog,Java,Android Studio,Dialog,Modal Dialog,我正在尝试使用自定义对话框进行模式视图,这是myDialog.java类: public class MyDialog extends Dialog implements android.view.View.OnClickListener { public Activity c; public Dialog d; public Button btnaddsingleingredient, btncanceladdingsingleingredient; pub

我正在尝试使用自定义对话框进行模式视图,这是myDialog.java类:

public class MyDialog extends Dialog implements android.view.View.OnClickListener {

    public Activity c;
    public Dialog d;
    public Button btnaddsingleingredient, btncanceladdingsingleingredient;

    public MyDialog(Activity a) {
        super(a);
        // TODO Auto-generated constructor stub
        this.c = a;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.my_dialog);
        btnaddsingleingredient = (Button) findViewById(R.id.btnaddsingleingredient);
        btncanceladdingsingleingredient = (Button) findViewById(R.id.btncanceladdingsingleingredient);
        btnaddsingleingredient.setOnClickListener(this);
        btncanceladdingsingleingredient.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnaddsingleingredient:
                d.dismiss();
                break;
            case R.id.btncanceladdingsingleingredient:
                d.dismiss();
                break;
            default:
                break;
        }
        dismiss();
    }
}
这是我调用对话框的类:

public class AggiungiIngredientiActivity extends AppCompatActivity {

    ImageButton btnAddNewIngredient;

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

        btnAddNewIngredient = findViewById(R.id.btnAddNewIngredient);

        btnAddNewIngredient.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v){

                MyDialog addIngredientDialog = new MyDialog(AggiungiIngredientiActivity.this);

                addIngredientDialog.btncanceladdingsingleingredient = findViewById(R.id.btncanceladdingsingleingredient);


                addIngredientDialog.btnaddsingleingredient.findViewById(R.id.btnaddsingleingredient).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                    }
                });
基本上,我想打开一个模式视图,让用户插入一些数据,但它给了我一个错误:

Attempt to invoke virtual method 'android.view.View android.widget.Button.findViewById(int)' on a null object reference
它说问题就在这里:

addIngredientDialog.btnaddsingleingredient.findViewById(R.id.btnaddsingleingredient).setOnClickListener(new View.OnClickListener())) { ... }
我不知道这是否是进行模式视图的最佳方式(我愿意接受建议),如果您需要xml,我可以更新帖子,但我认为这与此无关

更新1: 我也试过了

btnaddsingleingredient = (Button) findViewById(R.id.btnaddsingleingredient); //Replace sat1 with id defined in XML layout
而不是

addIngredientDialog.btnaddsingleingredient.findViewById(R.id.btnaddsingleingredient).setOnClickListener

解决了这个问题,我把解决方案放在这里,以防有人也需要它。 基本上,不用创建扩展对话框的自定义类,只需使用类对话框,然后使用
Dialog.setContentView(R.layout.yourlayout)
然后使用
dialog.findviewbyd(R.id.idbuttoninthecustomilert)引用按钮
最后,您可以在没有空引用的情况下设置setOnClickListener

Dialog mydialog;

Button button,

mydialog = new Dialog(context.this);

mydialog.setContentView(R.layout.yourlayout);

button= mydialog.findViewById(R.id.buttonid);