2013-02-21 18 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

相關問題