2012-03-04 82 views
0

我有一个应用程序,用户在屏幕上点击(用画布自定义视图的位置),并在用户点击的位置显示位图。我的应用程序运行良好,除了当我按'主页'按钮并离开活动。这是当用户在屏幕上点击并放置位图(在按下主页按钮之前)时外观的示例:http://i.stack.imgur.com/6BgIL.png保存自定义视图的状态?

当用户按下“home”按钮然后返回到应用程序时,它停止正常工作。放置在背景中的位图网格消失,以及绘制在画布上的所有其他位图球。唯一剩下的球是最后放置的球。不仅如此,该活动也会冻结,并且只允许用户在几秒钟后按任意按钮。这就是用户按下'主页'按钮并返回到活动(与上图相同的屏幕)后屏幕的显示方式:http://i.stack.imgur.com/198bP.png

如何保存自定义视图的状态,以便当活动再次启动时,保持不变? (或者如果我没有正确地处理这个问题,有没有其他解决方法?)。这是我在我的自定义表面观的暂停和恢复方法代码:

public void pause(){ 
    isRunning = false; 
    while(true){ 
     try { 
      ourThread.join(); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     break; 
    } 
    ourThread = null; 
} 

public void resume(){ 
    isRunning = true; 
    ourThread = new Thread(this); 
    ourThread.start(); 

} 

我一直在寻找了一段时间,但我似乎无法找到解决的办法。其他代码将在需要时提供。谢谢!

回答

0

请参阅本http://developer.android.com/reference/android/app/Activity.html

,你将需要使用的onResume()在屏幕上绘制的看法...

读取的actiivty生命周期存在,并找出完整的看法背后的实际原因,不显示在第二个屏幕...你可能不得不调整你的活动代码有点为这个..

+0

如何在不绘制新视图的情况下再次在屏幕上绘制相同视图?我想继续保持了上 – Jarnuman 2012-03-04 18:00:22

+0

一些视图的前视图相同的球和网格,第二屏幕丢失(但不是全部),意味着你必须有一些代码在调用onStart()或工作的onResume()方法,,你需要看它...的onCreate()将被称为第一/单次活动开始..而在onStart()和的onResume()将被称为** **再次当用户按下home键和返回到应用程序......你会看出来的其实为什么有些视图的缺失(由牢记活动周期)的原因,那么你就可以制定出您的问题... – 2012-03-05 04:55:36

+0

我会为恢复提供我的代码和在原始帖子的编辑中暂停方法。我似乎无法找到任何问题,也许你可以帮忙? – Jarnuman 2012-03-06 02:57:26

0

您需要在的onPause(),所有需要的数据保存如球坐标和活动状态,然后在恢复的onResume一切( )。

您可以存储和恢复任何Java对象。 阅读有关onRetainNonConfigurationInstance()和getLastNonConfigurationInstance()的更多信息http://developer.android.com/guide/topics/resources/runtime-changes.html

+0

这是一个问题,因为一旦放置了球,它的坐标就被删除。只要用户点击屏幕放置另一个球,坐标就会被新球的坐标覆盖。 – Jarnuman 2012-03-06 02:51:51