我想设置我的setOnShowListener()方法以防止对话框关闭,所以我写了这样的东西,
public Dialog update_pop_up()
{
final AlertDialog.Builder builder = new AlertDialog.Builder(UgJadwal.this);
LayoutInflater inflater = UgJadwal.this.getLayoutInflater();
View dialogView = inflater.inflate(R.layout.updatepopup, null);
builder.setView(dialogView);
builder.setIcon(R.drawable.update);
builder.setTitle("Update schedule");
builder.setPositiveButton(R.string.update, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int id)
{
}
});
builder.setNeutralButton(R.string.retrieve, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int id)
{
}
});
builder.setNegativeButton(R.string.cancel, null);
return builder.create();
builder.setOnShowListener(new DialogInterface.OnShowListener()
{
@Override
public void onShow(DialogInterface dialog)
{
Button retrieve = builder.getButton(AlertDialog.BUTTON_NEUTRAL);
retrieve.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
//do nothing;
}
});
}
});
}
至少有两个由eclipse提示的错误,第一个是在setOnShowListener
上说“方法setOnShowListener(new DialogInterface.OnShowListener(){})未定义类型AlertDialog.Builder”和另一个在builder.getButton(AlertDialog.BUTTON_NEUTRAL)
上说“方法getButton(int)未定义类型AlertDialog.Builder”。我只是想知道为什么它会引起错误,因为我认为我做得对。每个人都有想法来解决它,谢谢。
[UPDATE!]
谢谢大家的帮助。这是我setOnShowListener()
dialog.setOnShowListener(new DialogInterface.OnShowListener()
{
@Override
public void onShow(DialogInterface dialog)
{
Button retrieve = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_NEUTRAL);
retrieve.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
datasource.opentoread();
String[] hari = datasource.fetchDaily(ids.getText().toString());
datasource.close();
day.setText(String.valueOf(hari[0]));
subject.setText(String.valueOf(hari[1]));
time.setText(String.valueOf(hari[2]));
location.setText(String.valueOf(hari[3]));
lecture.setText(String.valueOf(hari[4]));
Toast.makeText(getApplicationContext(), "Retrieve success", Toast.LENGTH_LONG).show();
}
});
}
});
return dialog;
答案 0 :(得分:3)
第一个是在setOnShowListener上说“方法setOnShowListener(new DialogInterface.OnShowListener(){})未定义类型AlertDialog.Builder”
有两个原因可能会导致错误:
builder.setNegativeButton(R.string.cancel, null);
return builder.create();
builder.setOnShowListener(new DialogInterface.OnShowListener() ...
return
后,您将永远无法联系到任何代码。setOnShowListener()
是AlertDialog中的方法,而不是AlertDialog.Builder。说“方法getButton(int)未定义类型AlertDialog.Builder”
这是同样的问题,getButton()
是AlertDialog中的方法,而不是AlertDialog.Builder。
尝试这样的事情:
...
builder.setNegativeButton(R.string.cancel, null);
final AlertDialog dlg = builder.create();
dlg.setOnShowListener(new DialogInterface.OnShowListener()
{
@Override
public void onShow(DialogInterface dialog)
{
Button retrieve = dlg.getButton(AlertDialog.BUTTON_NEUTRAL);
// Changed this ^^^
retrieve.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
//do nothing;
}
});
}
});
return dlg;
答案 1 :(得分:1)
查看AlertDialog.Builder documentation,setOnShowListener
不是AlertDialog.Builder
的有效方法。但是,它是AlertDialog
的有效方法,它是builder.create()
的返回类型。同样地,getButton
实际上是AlertDialog
的方法。因此,您的代码应为:
AlertDialog alertDialog = builder.create();
alertDialog.setOnShowListener(new DialogInterface.OnShowListener()
{
@Override
public void onShow(DialogInterface dialog)
{
Button retrieve = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL);
retrieve.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
//do nothing;
}
});
}
});
答案 2 :(得分:0)
或者不是创建AlertDialog,而是可以使用标准对话框,然后在用户关闭对话框时想要或收听时将其关闭。这将是一个更好的选择,而不是使用按钮单击关闭对话框(AlertDialog)的默认行为。