我有一个带有ViewFlipper的活动,它可以在一堆视图(页面)与我的数据之间切换。
我正在考虑使用片段API在我的视图之间切换。这样做有什么好处?
我是否可以通过使用片段看到性能的提高,因为ViewFlipper实际上是在添加/删除视图层次结构时切换可见标志和片段来替换它们吗?
有人能给我们更多的洞察力吗?
谢谢!
发布于 2012-01-30 04:10:24
编辑:,我说的是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);与@se浸123相反,您可以在Android和更高版本的支持库中使用片段;有关详细信息,请参阅v4,但实际上只需要将jar文件放在/libs目录中。
顺便说一句,注意使用ViewPager,每个“页面”本身就是一个片段。
至于是否有性能改进,这取决于您要比较的是什么。我强烈建议您在担心性能问题之后尝试ViewPager。正如唐纳德·克努斯( Donald )所言,“我们应该忘记小效率,大约97%的时间说:过早的优化是万恶之源。”
在任何情况下,如果您有大量的页面,请参阅http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html以获得更合适的适配器。
发布于 2021-11-22 12:59:15
片段是Activity中用户界面的行为或部分。
您可以将多个片段组合在一个操作中,以便创建多层次的用户界面和重用,在多个操作中创建一个片段。您可以将该片段想象为一个模块化活动部分,有自己的生命周期,它接收自己的输入事件,您可以在工作期间添加或删除这些事件(类似于辅助活动,您可以在不同的操作中重用它)。
片段必须始终嵌入到动作中,片段生命周期直接取决于宿主生命周期。例如,当一个动作被暂停时,也就是说,它中的所有片段,以及该动作被销毁时,以及所有碎片。但是,在执行操作时(处于恢复生命周期的状态),您可以独立地控制每个片段,例如添加或删除它们。在执行这样的片段事务时,还可以将其添加到由活动控制的后台堆栈中--活动中的前一个堆栈中的每个条目都是所发生的片段事务的记录。back堆栈允许用户通过按后退按钮取消片段事务(向后移动)。
但是ViewFlipper只在一个动作中工作。所以,,它只是一个ViewGroup。一个简单的ViewAnimator,它将在添加到其中的两个或多个视图之间运行。一次只显示一个孩子。如果需要的话,您可以定期在每个孩子之间自动切换。
https://stackoverflow.com/questions/9009071
复制相似问题