Java Android studio自定义对话框按钮空对象引用
我正在尝试使用自定义对话框进行模式视图,这是myDialog.java类: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
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);