2012-01-05 93 views
8

我試圖在我的活動準備就緒時從myImageView.getImageMatrix()方法獲取值。 我嘗試使用onCreate()onStart()onResume()方法,但我得到的矩陣是默認值。Android - 當activity.setContentView完成渲染時是否觸發了任何事件?

如果我打電話myImageView.getImageMatrix()由OnClickListener觸發,在我的活動可見後,我得到正確的值。


只是爲了更清楚:

  • 調用getImageMatrix在onStart = Matrix{[1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]}

  • 調用getImageMatrix的onClick = Matrix{[0.77488154, 0.0, 7.6717987][0.0, 0.77488154, 0.0][0.0, 0.0, 1.0]}

+0

的問題是,佈局不被測量和渲染,直到的onResume()完成。檢查這個問題,看看你怎麼能得到通知時發生這種情況:http://stackoverflow.com/questions/7750102/how-to-get-height-and-width-of-button – Flo 2012-01-05 10:41:54

+0

謝謝你,onWindowFocusChanged被稱爲一旦數據在那裏,但是每次焦點更改都會調用它。我可以添加一個標誌,指示init狀態,但看起來並不那麼光滑。 我認爲這是我現在的解決方案,有什麼想法? – 2012-01-05 10:59:03

回答

15

你也可以試試這個方法:

ImageView myImageView = (ImageView) findViewById(R.id.myImageView); 
ViewTreeObserver vto = myImageView.getViewTreeObserver();  
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {   
    @Override   
    public void onGlobalLayout() {    
     // do something now when the object is loaded 
     // e.g. find the real size of it etc   
     myImageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);   
    }  
}); 
+0

您的解決方案看起來是最好的一個,謝謝:) – 2012-01-08 09:37:24

+0

removeGlobalOnLayoutListener()現在已被棄用,從SDK版本開始16(Jelly Bean)應該使用removeOnGlobalLayoutListener()。 – flo 2015-05-17 18:58:48

0

也許你可以使用一個onLayoutChangeListener但我我不確定。

+0

無法確定要使用此類,應用程序必須指定API級別「11」或更高。這不幸並不是我的情況。 – 2012-01-05 11:01:04

0

也許您可以使用AsyncTask(http://developer.android.com/reference/android/os/AsyncTask.html)來監視ImageView是否已加載(可能不等於空)。

您可以在onProgressUpdate中顯示一個progess對話框,然後從onPostExecute繼續您的代碼。

+0

謝謝, 聽起來有點複雜,似乎是一個微不足道的任務。 「視圖準備就緒時通知」 – 2012-01-05 11:03:30

4

我不是100%,但我需要知道類似的發展,我發現onWindowFocusChanged()在視圖加載時調用。我不確定這是否滿足您的需求。

+0

感謝您的理解,只要數據存在,就會調用onWindowFocusChanged,但是每次焦點更改都會調用onWindowFocusChanged。我可以添加一個標誌,指示init狀態,但看起來並不那麼光滑。我認爲這是我現在的解決方案,有什麼想法? – 2012-01-05 11:02:06

+0

哦耶對不起,忘了補充一點。我有一個全局布爾值,用於確保它是焦點更改的第一個調用,然後執行我需要執行的操作。我想這取決於你需要做什麼,但如果你只是需要訪問的東西第一次加載屏幕,然後全局變量應該修復它,如果不是最優雅的代碼。 – MikeIsrael 2012-01-05 11:08:14

+0

再次感謝,我將與此合作;) – 2012-01-05 11:22:09

相關問題