我有一个ViewFlipper活动,可以在一堆视图(页面)与我的数据之间翻转。ViewFlipper vs Fragments
我正在考虑使用片段API在我的视图之间切换。这样做有什么好处?
由于ViewFlipper基本上切换可见性标志和片段实际上是在添加/删除它们时替换视图层次结构,因此可以使用片段查看性能增益吗?
有人能给我们更多的见解吗?
谢谢!
我有一个ViewFlipper活动,可以在一堆视图(页面)与我的数据之间翻转。ViewFlipper vs Fragments
我正在考虑使用片段API在我的视图之间切换。这样做有什么好处?
由于ViewFlipper基本上切换可见性标志和片段实际上是在添加/删除它们时替换视图层次结构,因此可以使用片段查看性能增益吗?
有人能给我们更多的见解吗?
谢谢!
片段表示活动中的行为或用户界面的一部分。您可以在单个活动中组合多个片段来构建多窗格用户界面,并在多个活动中重用片段。您可以将片段看作活动的模块化部分,该活动有其自己的生命周期,接收自己的输入事件以及可以在活动运行时添加或删除的活动(有点像可以使用的“子活动”在不同的活动中重用)。
片段必须始终嵌入到活动中,片段的生命周期直接受到宿主活动生命周期的影响。例如,当活动暂停时,其中的所有片段也是暂停的,并且当活动被破坏时,所有片段也是如此。但是,在活动正在运行时(它处于恢复的生命周期状态),您可以独立操作每个片段,例如添加或删除它们。当您执行这样的片段事务时,您还可以将其添加到由活动管理的后端堆栈中 - 活动中的每个后端堆栈条目都是发生的片段事务的记录。后退堆栈允许用户通过按下BACK按钮来反转片段事务(向后导航)。
但ViewFlipper在单一活动中工作。 Simple ViewAnimator将在已添加到其中的两个或多个视图之间进行动画处理。一次只显示一个孩子。如果有要求,可以定期在每个孩子之间自动翻动。
编辑:我在这里谈论的ViewPager,而不是ViewFlipper。
使用ViewPager的好处是使用起来非常简单。您只需创建一个FragmentPagerAdapter并填写一些简单的字段。以下是我编写的用于显示从父类传递的项目的示例。
public static class DashboardPagerAdapter extends FragmentPagerAdapter {
private static final int NUM_ITEMS_PER_SCREEN = 12;
private List<View> mAllItems;
private int mNumScreens;
public DashboardPagerAdapter(FragmentManager fm, List<View> allItems) {
super(fm);
mAllItems = allItems;
mNumScreens = (int) Math.ceil(mAllItems.size()
/(float) NUM_ITEMS_PER_SCREEN);
Log.d(TAG, "num screens: " + mNumScreens);
}
@Override
public int getCount() {
return mNumScreens;
}
@Override
public Fragment getItem(int position) {
DashboardScreenFragment screen = DashboardScreenFragment
.newInstance();
for (int i = position * NUM_ITEMS_PER_SCREEN; i < (position + 1)
* NUM_ITEMS_PER_SCREEN; i++) {
if (i >= mAllItems.size()) {
break;
}
screen.addChild(mAllItems.get(i));
}
return screen;
}
}
并设置它是超级简单:
final DashboardPagerAdapter adapter = new DashboardPagerAdapter(
getFragmentManager(), mAllButtons);
相反的是@ sebap123说,你可以使用与Android v4和上面的支持库片段;有关详细信息,请参阅http://developer.android.com/sdk/compatibility-library.html,但它实际上只涉及将jar文件放入您的/ libs目录中。
顺便说一下,请注意,使用ViewPager,每个“页面”本身就是一个片段。
至于是否有性能改善,这取决于你将它比较。我强烈建议尝试ViewPager,并且只能在担心性能问题之后再尝试。正如Donald Knuth所说:“我们应该忘记小效率,大约97%的时间:过早优化是万恶之源。”
在任何情况下,如果您有大量页面,请参阅http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html以获得更适合的适配器。
我正在讨论使用ViewFlipper在片段之间翻转。我指的是使用FragmentManager添加/删除片段与使用ViewFlipper(仅仅翻转Views)(不再是片段!)之间的比较。 – dnkoutso
区别在于视觉效果。如果您希望用户能够在屏幕之间水平滑动,则应使用ViewFlipper。如果您只想添加和删除片段(例如使用按钮),则应该使用FragmentManager。 –
哇,你知道我刚才意识到了什么吗?我一直在讨论ViewPager,而不是ViewFlipper。 ViewFlipper完全不同,对不起。我并没有删除整个事物,而是使用ViewPager编辑并替换“ViewFlipper”,尽管它并不直接回答问题。 –
如果你想要一个性能分析,你应该自己动手。堆栈通常不善于回答这些问题。 – Warpzit