2013-04-11 20 views
8

我想知道当用户在警告对话框上按下“是”,并且这个人被解雇,该事件执行用户所在活动的onResume方法。在Android中解除警报后调用onResume方法?

因为我有一个“清洁“按钮询问用户是否确实清理了表单(活动)的所有字段,以便用空字段重新绘制活动。表单是动态创建的,因此我不知道元素在GUI中设置它们为空...

对不起,我的英语不好!

感谢和问候!

+0

如果你想检测用户什么时候做了某些事情,你可以使用布尔值,在开始时为false,在正确点击按钮时为true。 – 2013-04-11 14:37:47

回答

15

不知道这是应该的做法采取,但你应该能够做我认为你要求的。如果由于某种原因,这是你想达到的。

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); 

这也将提供一种无需直接引用的onResume()调用在你的主要活动来调用,如指出的是不恰当的做法;但是,我确实想直接回答问题。

+4

手动调用'onResume'是绝对不行的* – 2014-08-21 06:58:08

0

AFAIK这是不可能的,因为为了显示对话框,活动将已经通过onResume状态。看看下面的页面了解更多关于生命周期上的Android应用程序(它真的帮助我更好地理解):

App lifecycle

+0

那么,你所说的是,当屏幕上显示警报时,它不会导致活动在后台?它仍然在前景? – 2013-04-11 14:46:08

+0

@alois。wirkes这是一个很好的问题,我不确定。不过,我认为你应该看看codeMagic的答案。你可能不应该重绘布局来清除东西,但应该使用'setText()'。只要有对话框的“是”按钮,就可以调用一种方法来清理你想要的东西。 – TronicZomB 2013-04-11 14:54:31

0

如果你不知道当的onResume被调用时,添加日志到onResume方法。

1

要查看一个方法是否被调用,您可以在方法onResume()处放一个断点来查看会发生什么。如果您不熟悉Acitvity生命周期,那么执行此操作将帮助您熟悉它并阅读所提供的文档。

现在,我认为你不应该重绘整个layout只是为了清除一些Views。在我看来,使用setText()或其他方法重置所有字段的效率会更高,当用户点击“OK”或其他任何内容时,无论您需要什么,都可以使用setText()或其他方法。您可以使用invalidate()如果你需要重新绘制某些Views

我还建议看

Google I/O-Turbo Charge Your UI

Activity LifeCycle < - 非常重要的,了解

相关问题