2013-04-10 65 views
2

我目前正在寫一個android應用程序,我想它寫得很好/設計。Android的意見管理

現在我有一組倍數視圖(2個圖像視圖,3個文本視圖),我經常使用相對佈局。有什麼方法可以創建自定義視圖來重新組合它們?

我已經把這個截圖來解釋我做了什麼現在:

enter image description here

正如你所看到的,現在我只是複製/粘貼我的FrameLayout包含我的所有視圖...這是做到這一點的正確方法還是有一個更清潔的解決方案?

謝謝你們

+0

退房這樣的回答:http://stackoverflow.com/questions/2732682/simple-example-of-merge-and-include-usage-in-android-xml-layouts – drewhannay 2013-04-10 15:41:25

+0

這不是它是如何做。檢查Emil的答案。 – Budius 2013-04-10 15:58:41

回答

2

沒有一個更好的辦法是把所有的內容,你在你的佈局投入對象的ArrayList。 ,然後創建一個ArrayAdapter以按照您想要的方式從此對象填充ListView

此技術的優點是您獲得了一個Views回收機制,可以在您內部回收Views以便花費更少的內存。

在短期你必須:

1.創建一個代表你的數據的單個行的對象。

2.創建這些對象的ArrayList

3.創建一個包含ListView的佈局,或者使用代碼向您的主佈局中添加一個ListView。

4.創建單行佈局(您已經擁有它)。

5.創建一個ViewHolder,從Views的立場來看,它將代表您的數據行的視覺方面。

6.創建一個自定義ArrayAdapter,將根據您的需要填充行。

7.onCreate最後指定這個ArrayAdapterListView

您可以通過閱讀這篇博客我寫得到的如何實現這一點的想法:

Create a Custom ArrayAdapter

+0

謝謝你的親愛的埃米爾!它恰恰代表了我想要做的事情。有一個問題想到,我得到了你的代碼的總體思路。但在第一步中,你建議我創建一個包含我的「行」數據的對象(RowData,我猜想)。確切地說,在我的情況下......這是什麼數據?我的文本字符串和我的圖像路徑源?如果我理解正確,我應該創建一個構造函數,爲每個對象(表示不同的行)放置正確的字符串/圖像路徑? – Shinnyx 2013-04-10 16:51:05

+0

RowData對象與您的想法完全相同。所有與您想要在一行中顯示的內容相關的數據。在大多數情況下,它將是Strings,ints和FilePath或圖像的Url's,但如果要爲每行指定顏色並在ArrayAdapter中動態使用它,它甚至可以是Color對象,它甚至可以是其他項的ArrayList當您點擊該行時,這些數據將顯示在另一個列表中。 – 2013-04-10 16:56:23

+0

我明白了,謝謝!最後一個問題,因爲你的最後一句話打開了我對另一個問題的看法......當我點擊行時,它通過fragmentManager推送一個新的xml佈局(xml佈局總是具有與6個textviews相同的形式)...我想我相同的錯誤兩次(我複製/粘貼我的xml佈局與這6個文本視圖,並使用字符串引用直接在XML中更改它們的包含)...佈局包含在這裏沒有以編程方式編碼!我想我將不得不創建另一個新對象的數組列表,它將包含這6個文本視圖,對不對?謝謝你的時間,真的很感激! – Shinnyx 2013-04-10 17:12:57

0

如果你在代碼,而不是界面生成器做它,你可以使用LayoutInflator創建一個視圖從你的XML每次,然後將這些視圖作爲子視圖添加到您的LinearLayout。這也可以讓你改變數量,而不必複製粘貼每個新視圖。

LayoutInflater layoutInflator = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
LinearLayout ll = (LinearLayout) findViewById(R.id.yourLayout); 
for(int i=0; i<numOfSubViews; i++){ 
    View view = layoutInflator.inflate(R.layout.yourFrameLayout, null); 
    ll.add(view); 
}