我正在寻找一种解决方案来为自定义View实现ViewPager。 ViewPager有很多教程可以扩展xml布局,但我找不到自定义视图的示例。
我的自定义View类在画布上绘制多个对象(围绕它的文本的圆圈)。
可以通过实现OnTouchListener来移动和缩放对象。
对象是动态生成的(文本来自ArrayList)
在Activity中,我使用不同的参数实例化一个新视图:
this.mRenderCircleView = new RenderCircleView(this, resultList, showDemo);
resultList包含一个ArrayList<ArrayList<String>>
,其圆圈在RenderCircleView中绘制。
我希望在这种情况下实现ViewPager,如果ArrayList(&gt; 5)中有很多圈子项,并且由于性能问题,以前创建和加载所有视图将是不好的。所以我最好的选择是FragmentStatePagerAdapter。这应该是交互式内容的更好解决方案。
但我无法弄清楚它是如何运作的。片段的数量取决于给定ArrayList的大小除以应该在RenderCircleView中绘制的元素的数量。例如,ArrayList大小为20,每页应绘制5个circleObjects,然后我需要4个页面(片段)。
在这种情况下,使用ViewPager的最简单方法是什么?
答案 0 :(得分:2)
如果我理解正确,resultList中的每个条目都代表一个圆圈。 使用FragmentStatePagerAdapter确实是个好主意。
你可以这样解决:
您的Activity使用ViewPager对象托管布局。 ViewPager托管了一个Fragments列表,让我们将它们命名为CircleFragment。 CircleFragment具有RenderCircleView布局。
实例化CircleFragment时,将ArrayList放在Fragment.setArguments(Bundle)中,并在CircleFragment视图膨胀时检索它们。 (参见关于放置arraylist的编辑)
在您的活动中:创建您需要的CircleFragments数量,并将它们放入您将用于ViewPager的FragmentStatePagerAdapter中。
编辑(关于将ArrayList<ArrayList<String>>
放入Fragment.setArguments(Bundle)
)
ArrayList实现Serializable接口。如果你看一下Bundle,你可以在其中加入Serializable! Java负责序列化它。一块蛋糕:))
Bundle.putSerializable(String key, Serializable value)
Bundle.getSerializable(String key)
编辑2 (关于使用Fragment.onCreateView()
)
inflater就在那里以防万一(!)你需要它。只需离开inflater,实例化RenderCircleView
(就像您在原始代码中所做的那样)并在Fragment.onCreateView
中返回。您可能希望在其周围包裹LinearLayout
或RelativeLayout
,以便更好地控制RenderCircleView
的位置。