2013-02-21 88 views
2

我从蓝牙接收数据,然后将其显示在TextView中,并使用AChartEngine对其进行绘制。 当我第一次开始活动时,剧情显示完好。我还在通知(textview)中显示相同的数据。 当我按HOME按钮时,我可以看到活动仍在运行,因为通知中的数据正在更新。但是当我回到活动中时,图形将不会绘制,并且TextView保持空白(布局被重置)。防止achartengine和textview重置后,并将应用程序发送到背景

我读过一些关于这个主题,我相信我需要保存每次布局的状态。但我不确定如何为AChartEngine情节和textview做到这一点。

我看到我需要跟踪更改,并保存每个更改的布局,如或onStop。我读过,我需要使用onConfigurationChanged

请问谁能解释一下如何保存AChartEngineTextView的状态?它让我感到困惑,因为即使应用程序在背景中运行,图形应该“更新”,以及何时恢复布局,它是否会恢复图形中的旧数据?还是会显示最新的数据?

感谢

UPDATE(1): 添加以下代码(使用@丹建议样品):

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    //TODO 
    super.onSaveInstanceState(outState); 
    // save the current data, for instance when changing screen orientation 
    outState.putSerializable("datasetHR", mDatasetHR); 
    outState.putSerializable("datasetRR", mdatasetRR); 
    outState.putSerializable("datasetO2", mDatasetO2); 

    outState.putSerializable("rendererHR", mRendererHR); 
    outState.putSerializable("rendererRR", mRendererRR); 
    outState.putSerializable("rendererO2", mRendererO2); 

    outState.putSerializable("current_seriesHR", HRCurrentSeries); 
    outState.putSerializable("current_seriesRR", RRCurrentSeries); 
    outState.putSerializable("current_seriesO2", O2CurrentSeries); 

    outState.putSerializable("current_rendererHR", hrrenderer); 
    outState.putSerializable("current_rendererRR", rrrenderer); 
    outState.putSerializable("current_rendererO2", o2renderer); 

    outState.putSerializable("current_TV_HR", tvHR); 
    outState.putSerializable("current_TV_RR", tvRR); 
    outState.putSerializable("current_TV_O2", tvO2); 

} 

@Override 
protected void onRestoreInstanceState(Bundle savedState) { 
    super.onRestoreInstanceState(savedState); 
    // restore the current data, for instance when changing the screen orientation 
    mDatasetHR = (XYMultipleSeriesDataset) savedState.getSerializable("datasetHR"); 
    mdatasetRR = (XYMultipleSeriesDataset) savedState.getSerializable("datasetRR"); 
    mDatasetO2 = (XYMultipleSeriesDataset) savedState.getSerializable("datasetO2"); 

    mRendererHR = (XYMultipleSeriesRenderer) savedState.getSerializable("rendererHR"); 
    mRendererRR = (XYMultipleSeriesRenderer) savedState.getSerializable("rendererRR"); 
    mRendererO2 = (XYMultipleSeriesRenderer) savedState.getSerializable("rendererO2"); 

    HRCurrentSeries = (XYSeries) savedState.getSerializable("current_seriesHR"); 
    RRCurrentSeries = (XYSeries) savedState.getSerializable("current_seriesRR"); 
    O2CurrentSeries = (XYSeries) savedState.getSerializable("current_seriesO2"); 

    hrrenderer = (XYSeriesRenderer) savedState.getSerializable("current_rendererHR"); 
    rrrenderer = (XYSeriesRenderer) savedState.getSerializable("current_rendererRR"); 
    o2renderer = (XYSeriesRenderer) savedState.getSerializable("current_rendererO2"); 


    tvHR = (TextView) savedState.getSerializable("current_TV_HR"); 
    tvRR = (TextView) savedState.getSerializable("current_TV_RR"); 
    tvO2 = (TextView) savedState.getSerializable("current_TV_O2"); 

} 

但它仍然没有帮助。 TextView和图形仍然恢复到它们的原始状态。问题不止于此。我不断地从蓝牙接收数据。我将这些数据绘制在AChartEngine中,并在TextView中显示它。在活动经过和onStop后恢复活动后,数据未更新。

它在处理程序收到MESSAGE_READ时更新,并且它运行一个方法。在该方法中使用我更新的TextView:活动发送到后台(经过和onStop

TextView tvHR = (TextView) findViewById(R.id.HRdisplay); // update the textview 
TextView tvRR = (TextView) findViewById(R.id.RRdisplay); // update the textview 
TextView tvO2 = (TextView) findViewById(R.id.O2display); // update the textview 
tvHR.setText(hr); 
tvRR.setText(rr); 
tvO2.setText(o2); 

后,然后将其恢复回来,TextView的将不会更新。但是我知道数据已经进入了,并且它通过了上面的代码,因为同样的方法更新了通知,并且我可以随时看到传入的数据更新。

更新#2: 添加以下代码里面onResume

if (savedInstanceState != null) { 
     //Then the application is being reloaded 
     onRestoreInstanceState(savedInstanceState); 
    } 

但它仍然没有恢复到以前的状态,并且显示的TextView和图表仍然没有被更新。

回答

0

您绝对需要覆盖onSaveInstanceStateonRestoreInstanceState,并存储和检索图表和textview值的数据集和渲染器。请参阅示例here

+1

我已经添加了'onSaveInstanceState'和'onRestoreInstanceState',但它仍然没有帮助我。似乎只是忽略它而已。 但是,最让我困惑的是传入数据在通知的textview中显示和更新的事实,但是当我将它设置为背景后返回到活动中时,textview和graph将被初始化并为空。数据仍然显示在通知的文本视图中,但未在活动的main.xml文本视图中更新。 – KingsInnerSoul 2013-02-21 16:01:05

+0

你看过我提到的演示代码吗? – 2013-02-21 16:38:42

+1

是的,我做到了。我更新了这个问题,所以你可以看到我迄今为止做了什么。 – KingsInnerSoul 2013-02-21 17:10:54

相关问题