0

我正在寻找一种解决方案来为自定义视图实现 ViewPager。有很多关于 ViewPager 的教程可以扩展 xml 布局,但我找不到自定义视图的示例。我的自定义 View 类在画布上绘制多个对象(带有文本的圆圈)。 在此处输入图像描述可以通过实现 OnTouchListener 来移动和缩放对象。对象是动态生成的(文本来自 ArrayList)

在活动中,我用不同的参数实例化了一个新视图:

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

resultList 包含ArrayList<ArrayList<String>>要在 RenderCircleView 中绘制的圆圈。我想在这种情况下实现 ViewPager,如果 ArrayList ( > 5 ) 中有很多圆形项目,并且由于性能问题,以前创建和加载所有视图会很糟糕。所以我认为最好的选择是 FragmentStatePagerAdapter。这应该是交互式内容的更好解决方案。

但我无法弄清楚它是如何工作的。Fragments 的数量取决于给定 ArrayList 的大小除以应在 RenderCircleView 中绘制的元素的数量。例如 ArrayList 大小为 20,每页应绘制 5 个圆形对象,那么我需要 4 个页面(片段)。

在这种情况下使用 ViewPager 的最简单方法是什么?

4

1 回答 1

2

如果我理解正确,resultList 中的每个条目都代表一个圆圈。使用 FragmentStatePagerAdapter 确实是个好主意。

你可以这样解决它:

您的 Activity 使用 ViewPager 对象托管布局。ViewPager 托管一个片段列表,我们将它们命名为 CircleFragment。CircleFragment 有一个带有 RenderCircleView 的布局。

实例化 CircleFragment 时,将 ArrayList 放入 Fragment.setArguments(Bundle) 并在 CircleFragment 的视图膨胀时检索这些。(请参阅有关放置数组列表的编辑)

在您的活动中:创建所需数量的 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()

充气机在那里以防万一(!)您需要它。只需保留充气机的原样,实例化RenderCircleView(就像您在原始代码中所做的那样)并将其返回到Fragment.onCreateView. 您可能希望将 aLinearLayoutRelativeLayout围绕它包裹起来,以便更好地控制RenderCircleView.

于 2013-06-27T14:57:03.790 回答