2012-01-30 19 views
0

我的經驗和好書告訴我,在代碼中重複同樣的事情是不好的。但是,當我使用Android的看法,我經常會重複同樣的事情,甚至是4倍:如何逃避Android的重複?

兩次XML:

<LinearLayout     -1 
    android:id="@+id/lila" 
    ... 
> 
    ... 
</LineraLayout     -2 

,並兩次在代碼:

 3    4 
LinearLayout ll=(LinearLayout) findViewById(R.id.lila); 

當然,當我有要改變視圖的類型,我必須在四個地方完成,導致錯誤的原因。在XML中,我可以使用重構來同時更改佈局類,甚至是視圖或小部件。但這並沒有什麼幫助,因爲編譯器沒有捕捉到最危險的錯誤,它可能出現在代碼和XML之間。後來我不得不浪費時間尋找運行時錯誤的來源。

是否有其他可能性來解決佈局視圖?不是很危險?

如果不是,你知道一些訣竅要改變或至少同時檢查所有這些地方嗎?

謝謝。

回答

2

的東西,可以幫助你(視情況下,你想例如你LinearLayout做什麼)的聲明你Views爲儘可能通用。在這裏,在你的例子中,如果你不需要任何LinearLayout特定的方法,你可以保留你的LinearLayoutViewGroup。所以,如果以後你決定用xml更改這個佈局,在RelativeLayoutFrameLayout等等,你不會得到任何轉換問題。

您可以對Buttons或其他Views採用相同的方法,具體取決於您在其上使用的方法。例如,如果您只在Button上設置了onClickListener,則可以將其引用到View(例如View button=findViewById(R.id.button);),稍後您可以將其更改爲ImageView,並且仍然沒有任何投射問題,因爲它們都從View延伸。

因此,大行的解決方案是:儘可能在最高的level處使用一個類。

+0

謝謝。但遺憾的是,在代碼和xml中同時進行更改沒有任何技巧。 – Gangnus 2012-01-30 12:55:23

2

對於xml佈局重用,您可以使用包含和合並佈局。 http://developer.android.com/resources/articles/layout-tricks-merge.html

對於Activity,您必須儘可能使用超類引用,因爲它爲您提供了更改特定對象類的靈活性。的

像,而不是使用我們可以

的ViewGroup LL =(的ViewGroup)findViewById(R.id.lila);

現在這個可以解決相對佈局,線性佈局,表格佈局等