2015-02-23 72 views
1

我知道如何使用View.isInEditMode方法。Android中自定義視圖的EditMode有哪些限制?

我不完全明白的是當我應該使用。也就是說,我應該阻止在EditMode中運行。

有一些明顯的例子,自定義視圖執行所有類似數據庫訪問,網絡,線程等瘋狂的事情,在EditMode中,您應該避免使用它們。

我創建了幾個自定義視圖,不做以上任何事情。他們只使用常規的繪圖API,或者加載資源,如drawables。

在設備上運行時,它們看起來和預期完全一樣,但在佈局設計器中,它們或者看起來不應該,或者由於某些神祕異常(即通常爲NullPointerException)而無法渲染。

那麼,EditMode在這些API中是否有任何限制?

+0

是什麼異常? – vadimvolk 2015-02-24 03:21:56

+0

@vadimvolk通常爲NullPointerException。編輯了這個問題。 – 2015-02-24 06:25:01

回答

2

自定義視圖應該工作得很好,只要他們只調用視圖框架的一部分,而不是任何應用程序代碼。無論如何,這對於視圖來說是一個很好的分離:它們應該包含視圖狀態,而不是應用程序邏輯。

如果您的自定義視圖嘗試從其構造函數(或測量或繪製方法)訪問類,例如嘗試訪問應用程序框架代碼(如FragmentManager),則只需使用View#isInEditMode。在這種情況下,您可以使用View#isInEditMode跳過這些調用。

很難說更多關於你所看到的問題,而不知道更多。特別是,你看到的是NullPointerException(完整堆棧跟蹤)。

它也可能是一個layoutlib錯誤。嘗試將渲染版本(在渲染工具欄中)切換到不同的版本。

+0

將版本從21切換到19就有訣竅。一切都呈現得很好19.我想下一步是一個錯誤報告? – 2015-02-24 21:23:11