我的应用程序从主视图中打开一个新视图:
Intent ElementsIntent = new Intent(this, ElementList.class);
startActivityForResult(ElementsIntent, 0);
显示了一个元素列表,当推送其中一个元素时,一个视图以与之前相同的方式打开一个新的Activity。在这个视图中我想在按钮单击处理程序中显示AlertDialog,但是当我调用show()时,应用程序崩溃了。
我很确定根据我尝试并打开对话框的地方,它与上下文不正确有关,但我尝试从主视图中创建静态上下文,我尝试过使用element.this,这是连接到活动的类,我尝试过getApplicationContext,所有这些都会导致应用程序崩溃。
我希望有人可以解释我做错了什么。
感谢。
这是崩溃的AlertDialog代码:
public void GoBackClickHandler(View v)
{
AlertDialog.Builder builder = new AlertDialog.Builder(ElementItem.this);
builder.setMessage("Skal ændringer i besvarelse gemmes?")
.setCancelable(false)
.setPositiveButton("Ja", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
if(inputIsValue())
{
UpdateELement task = new UpdateELement();
task.applicationContext = ElementItem.this;
task.execute(1);
}
}
})
.setNegativeButton("Nej", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
finish();
}
});
AlertDialog alert = builder.create();
alert.show();
}
如果我将此代码移动到OnCreate,则警报显示正常并且没有应用程序崩溃。只有当我将它放在ClickHandler中时它才会崩溃。
答案 0 :(得分:1)
我终于找到了解决这个问题的方法。
我必须在onCreate方法的变量中保存Activity的上下文,然后在ClickHandler AlertDialog调用中使用它,然后一切正常。
希望这对有这个恼人问题的人有所帮助。
答案 1 :(得分:1)
public class SplashActivity extends AppCompatActivity implements DialogInterface.OnClickListener {
//Object to hold the listener instance
DialogInterface.OnClickListener listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
//Assign this to listener.
listener = this;
handler.postDelayed(new Runnable() {
@Override
public void run() {
AlertDialog.Builder builder = new AlertDialog.Builder(SplashActivity.this);
builder.setTitle("Alert");
builder.setMessage("Alert Message...!");
//Here pass the listener object.
builder.setPositiveButton("OK", SplashActivity.this.listener);
builder.show();
}
});
}
@Override
public void onClick(DialogInterface dialog, int which) {
SplashActivity.this.finish();
}
}