我有一个ViewPager,我可以显示多个项目。我使用了将多个项目放在一个片段中的解决方案,并创建了一个Adapter,它根据屏幕的宽度计算每个片段可以放入多少个项目。
my FragmentPagerAdapter的getItem为每个片段创建一个条目范围,划分每个片段的条目数量。
例如,我有12个项目,在纵向,我可以放3个项目。getItem将创建范围为0-2、3-5、6-8和9-11的片段。在横向上,由于屏幕的宽度较大,例如,我可以放置5个项目。因此,范围将是0-4、5-8和9-11。
有了这个需求,我需要创建新的片段,并在方向改变时销毁旧的片段。
我创建了一个解决方案,但它依赖于活动的isChangingConfigurations()方法。但此方法仅适用于API 11级及更高级别。所以我不能用它。
基本上,我不允许片段保存其状态,如果配置发生更改,我将在onPause中删除它。但由于我在旧的android版本中没有这种方法,我需要另一个解决方案。
有谁可以帮我?
发布于 2013-10-15 21:01:17
另一种解决方案是:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
if (pagerAdapter != null) {
pagerAdapter.removeAllfragments();
}
super.onSaveInstanceState(savedInstanceState);
}
和适配器的代码:
public void removeAllfragments()
{
if ( mFragmentList != null ) {
for ( Fragment fragment : mFragmentList ) {
mFm.beginTransaction().remove(fragment).commit();
}
mFragmentList.clear();
notifyDataSetChanged();
}
}
mFragmentList应该在以下内容中添加片段:
@Override
public Fragment getItem(int position) {}
发布于 2013-07-20 05:41:44
对于当前方法,最简单的解决方案可能是确保getItem(int)
为横向和纵向返回不同的值。该id用于生成片段标签,在方向改变之后,该片段标签用于检索分离的片段并将其重新附着。对于3个项目和5个项目彼此相邻的情况,使用不同的if,如果应该有5个项目,则具有3个项目的片段将永远不会被重新附加。
默认情况下,getItemId(int)
只返回提供的元素位置,如下所示:
public long getItemId(int position) {
return position;
}
为了根据您的情况返回不同的In,您有多种选择。一个简单的方法是用给定位置显示的所有项目的索引做一些聪明的事情。或者,你可以做一个简单的设备方向检查,并用总项目数来偏移id,或者用字符串和hashcode等做一些聪明的事情。只要确保你在相同的方向上为相同的片段返回相同的id即可。
https://stackoverflow.com/questions/17755475
复制相似问题