0

我的应用程序从主视图打开一个新视图,其中包含:

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 中时它才会崩溃。

4

2 回答 2

1

我终于找到了解决这个问题的方法。

我必须将 Activity 的上下文保存在 onCreate 方法中的变量中,然后在 ClickHandler AlertDialog 调用中使用它,然后一切正常。

希望这对解决这个烦人问题的其他人有所帮助。

于 2012-11-17T10:21:24.453 回答
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();
        }

}
于 2016-08-18T17:46:46.890 回答