按下后退按钮时的完成活动(警报对话框)

And*_*ast 1 android android-alertdialog

我正在开发一个应用程序,它将一些json解析为listview(背景).我正在尝试处理数据不可用于填充列表视图时的错误.

我已经通过创建一个Alert Dialog在onPostExecute方法中处理了这个,如下面的代码所示

    protected void onPostExecute(String args) {
            progressDialog.dismiss();

            //Shows alert dialog if data is unavailable

            if(args != null && args.equals(noData)){
                 AlertDialog.Builder builder = new AlertDialog.Builder(JsonActivity.this);
                 builder.setTitle("Title");
                 builder.setMessage(noData);
                 AlertDialog alert = builder.create();
                 alert.show();

            }


        }
Run Code Online (Sandbox Code Playgroud)

这工作正常,但如果我单击后退按钮,它会返回到未填充的空白列表视图.

如果在显示警告对话框时按下后退按钮,我想完成活动.

我也尝试重写onBackPressed方法,但它没有用.

        @Override
    public void onBackPressed() {
        JsonActivity.this.finish();
    }
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

Yar*_*lyk 7

...
builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {
        // if from activity
        finish();
        // if activity is a field
        //activity.finish();
    }

});
Run Code Online (Sandbox Code Playgroud)

如果在显示时按下后退按钮上的对话框被取消,则触发onCancel.

或者使用OnDismissListener,无论你按下某个按钮还是后退按钮,每当Dialog被解除时都会被调用

...
AlertDialog alert = builder.create();
alert.setOnDismissListener(new DialogInterface.OnDismissListener() {
    @Override
    public void onDismiss(DialogInterface dialog) {
        finish();
    }
});
alert.show();
Run Code Online (Sandbox Code Playgroud)

如果没有数据而不是拨号,那么显示Toast通常是一种更好的做法.

        if(args != null && args.equals(noData)){
             Toast.makeText(context, noData, Toast.LENGTH_LONG).show();
             finish();
        }
Run Code Online (Sandbox Code Playgroud)