2013-06-27 17 views
0

我正在尋找解決方案來實現自定義視圖的ViewPager。 ViewPager有很多教程可以擴展xml佈局,但是我找不到具有自定義視圖的示例。 我的自定義視圖類在畫布上繪製多個對象(周圍有文字的圓圈)。 enter image description here通過實現OnTouchListener可以移動和縮放對象。 目的是動態生成(文本來自一個ArrayList)ViewPager自定義與畫布對象查看

在活動我實例具有不同參數的新的視圖:

this.mRenderCircleView = new RenderCircleView(this, resultList, showDemo); 

的resultList保存與圓圈的ArrayList<ArrayList<String>>在RenderCircleView繪製。 我想在這種情況下實現ViewPager,如果ArrayList(> 5)中有很多圓圈項目,並且由於性能問題,以前創建並加載所有視圖會很糟糕。所以我最好的選擇是FragmentStatePagerAdapter。這應該是交互式內容的更好解決方案。

但我不明白它是如何工作的。碎片的數量取決於給定的ArrayList的大小除以RenderCircleView中應該繪製的元素的數量。例如,ArrayList的大小是20,每個頁面上應該繪製5個circleObjects,然後我需要4個頁面(片段)。

在這種情況下使用ViewPager的最簡單方法是什麼?

回答

2

如果我理解正確,resultList中的每個條目都代表一個圓。 使用FragmentStatePagerAdapter確實是一個好主意。

你可以解決這個問題是這樣的:

你的活動舉辦與ViewPager對象的佈局。 ViewPager託管碎片列表,我們將它們命名爲CircleFragment。 CircleFragment具有RenderCircleView的佈局。

當實例化CircleFragment時,將ArrayList放入Fragment.setArguments(Bundle)中,並在CircleFragment的視圖被誇大時檢索這些。 (請參閱關於放置數組列表的編輯)

在您的活動中:創建您需要的CircleFragments的數量,並將它們放入您將用於ViewPager的FragmentStatePagerAdapter中。

EDIT(關於把ArrayList<ArrayList<String>>Fragment.setArguments(Bundle)

一個ArrayList實現Serializable接口。如果你看一個Bundle,你可以放入一個Serializable! Java負責序列化它。小菜一碟:)

Bundle.putSerializable(String key, Serializable value) Bundle.getSerializable(String key)

EDIT 2(約使用Fragment.onCreateView()

充氣器有以防萬一(!),你需要它。只需讓inflater保持原樣,例示RenderCircleView(就像您在原始代碼中那樣),然後返回Fragment.onCreateView。您可能希望在其周圍包裹LinearLayoutRelativeLayout以更好地控制RenderCircleView的位置。

+0

是的,這正是我想要實現的。我會盡力實現這一點,並在這裏發佈我的結果。我並不知道我可以使用setArguments來檢索數據。 – droiddude

+0

如何將類型ArrayList >的參數放入Bundle不支持此類型。 – droiddude

+0

我編輯了答案。請參閱「編輯」部分。 –