【问题标题】:Finishing activity when back button is pressed (Alert Dialog)按下后退按钮时完成活动(警报对话框)
【发布时间】:2013-02-21 23:18:09
【问题描述】:

我正在开发一个将一些 json 解析为列表视图(背景)的应用程序。当数据无法填充列表视图时,我目前正在尝试处理错误。

我已经在 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();

            }


        }

这很好用,但是如果我单击后退按钮,它会返回到一个未填充的空白列表视图。

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

我也尝试过覆盖 onBackPressed 方法,但没有成功。

        @Override
    public void onBackPressed() {
        JsonActivity.this.finish();
    }

有什么想法吗?

【问题讨论】:

  • 尝试在您的警报上添加一个监听器以接收取消或关闭操作

标签: android android-alertdialog


【解决方案1】:
...
builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {
        // if from activity
        finish();
        // if activity is a field
        //activity.finish();
    }

});

onCancel 如果您的对话框在显示时按下后退按钮时可取消,则会触发。

或者使用 OnDismissListener,无论你按下某个按钮还是返回按钮,只要对话框被关闭,就会调用它

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

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

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

【讨论】:

  • 第一个选项非常有效,谢谢。顺便说一句,为什么显示敬酒而不是对话是更好的做法。我选择了对话框,因为它看起来更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多