首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使ViewPager的项目在方向更改时被销毁?

如何使ViewPager的项目在方向更改时被销毁?
EN

Stack Overflow用户
提问于 2013-07-20 05:04:28
回答 2查看 3.4K关注 0票数 2

我有一个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版本中没有这种方法,我需要另一个解决方案。

有谁可以帮我?

EN

回答 2

Stack Overflow用户

发布于 2013-10-15 21:01:17

另一种解决方案是:

代码语言:javascript
运行
复制
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    if (pagerAdapter != null) {
        pagerAdapter.removeAllfragments();
    }
    super.onSaveInstanceState(savedInstanceState);
}

和适配器的代码:

代码语言:javascript
运行
复制
public void removeAllfragments()
{
    if ( mFragmentList != null ) {
        for ( Fragment fragment : mFragmentList ) {
            mFm.beginTransaction().remove(fragment).commit();
        }
        mFragmentList.clear();
        notifyDataSetChanged();
    }
}

mFragmentList应该在以下内容中添加片段:

代码语言:javascript
运行
复制
@Override
public Fragment getItem(int position) {}
票数 3
EN

Stack Overflow用户

发布于 2013-07-20 05:41:44

对于当前方法,最简单的解决方案可能是确保getItem(int)为横向和纵向返回不同的值。该id用于生成片段标签,在方向改变之后,该片段标签用于检索分离的片段并将其重新附着。对于3个项目和5个项目彼此相邻的情况,使用不同的if,如果应该有5个项目,则具有3个项目的片段将永远不会被重新附加。

默认情况下,getItemId(int)只返回提供的元素位置,如下所示:

代码语言:javascript
运行
复制
public long getItemId(int position) {
    return position;
}

为了根据您的情况返回不同的In,您有多种选择。一个简单的方法是用给定位置显示的所有项目的索引做一些聪明的事情。或者,你可以做一个简单的设备方向检查,并用总项目数来偏移id,或者用字符串和hashcode等做一些聪明的事情。只要确保你在相同的方向上为相同的片段返回相同的id即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17755475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档