我有一个TableLayout,我希望用户在运行时能够添加项目(并使用单个EditText命名这些项目)。因此,我需要一个“添加”按钮,我认为AlertDialog适合。有来自android开发人员教程的标准代码:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
builder.setView(inflater.inflate(R.layout.add_layout,null));
builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User clicked OK button
}
});
builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
AlertDialog dialog = builder.create();
dialog.show();
在将它放入Activity的onCreate方法时效果很好,但在将此插入onClick方法时不能用于此“添加”按钮。为什么这样,我该如何解决这个问题? 更多信息:通过活动的XML文件android:onClick =“Add”调用AddClick按钮onClick方法,然后它是activity的java / class文件中的一个函数。单击“添加”按钮时发生的情况就是“活动”崩溃,而不是整个应用程序,然后我向父活动返回一步,并显示以下消息:“应用程序已停止运行”。
答案 0 :(得分:1)
我认为您可能对这个问题没有太多回应,因为您没有提供足够的信息。当您将其添加到“添加”按钮的onClick方法时,表示AlertDialog 无效 。怎么了?应用程序崩溃了吗?如果是这样,你得到什么错误信息?或者它没有崩溃,但没有显示AlertDialog?你如何将AlertDialog放在onClick方法中?您是在布局xml中使用android:onClick="someMethod"
属性,还是在代码中分配了onClickListener?
我会猜测并假设您在代码中使用以下格式分配onClickListener:
myAddButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
builder.setView(inflater.inflate(R.layout.add_layout,null));
...
}
});
如果您采用上述方法,您需要意识到您正在使用匿名内部类,并且this
关键字引用它所在的对象。在匿名内部类中,{{1} } keyword不再引用已放入匿名内部类的父活动。
this
构造函数希望您传递一个上下文。当您在Activity的onCreate()方法中编写AlertDialog.Builder()
时,AlertDialog.Builder(this)
引用Activity,而Activity是Context的子类,因此this
构造函数很高兴。 />
但是,当您在AlertDialog.Builder()
中编写AlertDialog.Builder(this)
时,View.OnClickListener()
现在引用的是onClickListener,它不是Context的子类,因此this
构造函数不满意。
如果这不是您正在采取的方法,那么请提供更多信息,以便为您提供帮助。
如果这是你正在采取的方法,那么你可以通过将AlertDialog创建放回Activity中来解决问题。
AlertDialog.Builder()