在Android中,警报弹窗关闭后如何调用onResume方法?

10
我想知道当用户在警示对话框上点击“Yes”并关闭它时,是否会执行该用户所在的活动的onResume方法。
因为我有一个“清除”按钮,它会询问用户是否确实要清除表单(活动)中的所有字段,以便使用空字段重新绘制活动。 表单是动态创建的,因此我不知道先验地设置GUI中的哪些元素为空...
对我的糟糕英语表示抱歉!!
谢谢和问候!

如果您想检测用户何时执行某些操作,可以使用布尔值。在开始时它将为false,并在按钮的肯定点击上变为true。 - Marko Niciforovic
4个回答

21

不确定这是否是应该采取的方法,但您应该能够实现我认为您正在请求的内容。如果出于某种原因,这就是您想要实现的。

AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Do you want to clean?")
      .setPositiveButton("Yes", new DialogInterface.OnClickListener()
      {
        public void onClick(DialogInterface dialog, int id)
        {
          dialog.dismiss();
          ((ActivityName) appContext).onResume();
        }
      })
      .setNegativeButton("No", new DialogInterface.OnClickListener()
      {
        public void onClick(DialogInterface dialog, int id)
        {
          dialog.dismiss();
        }
      });
    builder.create().show();
}

在执行成功但失败时不做任何操作的情况下,您确实需要调用您的清理函数而不是生命周期调用。

另一种可能的方法是使用标志将当前活动带回前台。

Intent intent = new Intent(this, CurrentlyRunningActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

这也将提供一种调用主Activity的方式,而不需要直接引用onResume()的调用,因为这并不是合适的方法;然而,我确实希望直接回答所问的问题。


1

要查看方法是否被调用,您可以在该方法 onResume() 处设置断点以查看发生了什么。如果您不熟悉 Activity 生命周期,则这样做将有助于您熟悉它并阅读提供的文档。

现在,我认为您不应重新绘制整个 layout 来清除某些 Views。在我看来,更有效的方法是当用户单击“ok”或其他内容时,使用 setText() 或其他方法重置所有字段以满足您的需求。如果需要重新绘制特定的 Views,则可以使用 invalidate()

我还建议观看

Google I/O-加速您的 UI

Activity 生命周期 <-- 非常重要的理解


0
据我所知,这是不可能的,因为为了显示对话框,活动必须已经通过onResume状态。请查看以下页面以获取有关Android应用程序生命周期的更多信息(它确实帮助我更好地理解):

应用程序生命周期


所以,你的意思是当警报出现在屏幕上时,它不会导致活动进入后台?它仍然在前台? - alois.wirkes
@alois.wirkes 这是一个好问题,我不确定。但是我认为你应该看一下codeMagic的答案。你可能不应该重新绘制布局来清除东西,而应该使用setText()。只需让对话框的“是”按钮调用一个执行所需清理的方法即可。 - TronicZomB

0
如果您不确定何时调用onResume方法,请在onResume方法中添加日志。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接