在saveState中我的上下文是什么?

时间:2011-08-30 01:35:41

标签: android

我正在尝试在saveState()调用中进行一些清理。如果有,我想弹出一个对话框 退出活动时出错,但此时此活动已经消失。

我希望从名为StudentEdit的活动中发生这种情况,但上下文应该是什么? 当我使用StudentEdit.this时,对话框弹出然后消失。 getApplicationContext导致 空指针异常。

private void saveState() {

    // some error checking code
    // if blah blah
    AlertDialog alertDialog = new AlertDialog.Builder(StudentEdit.this).create();

alertDialog.setMessage("error");

alertDialog.setButton(BUTTON_POSITIVE, "Yes", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {

               // do something for yes

              } });
alertDialog.setButton(BUTTON_NEGATIVE, "No", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
             dialog.cancel();            // kill dialog
             StudentEdit.this.finish();  // kill the activity
    }
});
alertDialog.show();

} 

2 个答案:

答案 0 :(得分:0)

我认为你不能通过设计在那里展示UI。如果您有错误,您应该保留该数据并在下次启动时将其显示给用户。

通常,您不能将ApplicationContext用于与UI相关的内容。

答案 1 :(得分:0)

这对你有用。

@Override
protected void onPause() {
    saveState(this)
}

将您的saveState更改为。

private saveState(Context context) {
    //AlertDialog alertDialog = new AlertDialog.Builder(context).create();
    Toast.maketext(context, "Boom..." Toast.LENGTH_SHORT).show();
}

这应该足够了,可能不需要来自onSaveInstanceState的调用。

<强>更新

如果你真的需要在这一点上展示一些东西,我还是会建议考虑你的设计。可能是Toast会做的,此时不建议使用警报阻止UI。