public void clearProgressUpTo(int progress) {
boolean deleted = false;
for (int i = fragments.size() - 1; i > 0; i--) {
int key = fragments.keyAt(i);
if (key != progress) {
fragments.delete(key);
deleted = true;
} else {
break;
}
}
if (deleted)
notifyDataSetChanged(); //prevents recursive call (and IllegalStateException: Recursive entry to executePendingTransactions)
while (mSavedState.size() > progress) {
mSavedState.remove(mSavedState.size()-1);
}
}
我遇到的问题是,我需要完全删除FragmentStatePagerAdapter
中保存的一些片段
。
我已经对它进行了position_none
修复,但是旧的片段似乎仍然完好无损。
建筑施工
public class VerticalAdapter extends FragmentStatePagerAdapter {
private SparseArray<Fragment> fragments = new SparseArray<Fragment>();
...
@Override
public Fragment getItem(int position) {
return getFragmentForPosition(position);
}
@Override
public int getCount() {
return fragments.size();
}
public void clearProgressUpTo(int progress) {
boolean deleted = false;
for (int i = fragments.size() - 1; i > 0; i--) {
int key = fragments.keyAt(i);
if (key != progress) {
fragments.delete(key);
deleted = true;
} else {
break;
}
}
if (deleted)
notifyDataSetChanged(); //prevents recursive call (and IllegalStateException: Recursive entry to executePendingTransactions)
}
private Fragment getFragmentForPosition(int position) {
return fragments.get(getKeyForPosition(position));
}
public int getKeyForPosition(int position) {
int key = 0;
for (int i = 0; i < fragments.size(); i++) {
key = fragments.keyAt(i);
if (i == position) {
return key;
}
}
return key;
}
FragmentStatePageAdapter
在销毁片断的同时保存它的状态,以便在重新创建片断时将保存的状态应用于它。
片段状态存储在私有成员变量中。因此,我们不能扩展当前的实现来添加删除保存状态的特性。
我克隆了当前的FragmentStatePagerAdapter
实现,并包含了保存的状态删除功能。以下是要点参考。
/**
* Clear the saved state for the given fragment position.
*/
public void removeSavedState(int position) {
if(position < mSavedState.size()) {
mSavedState.set(position, null);
}
}
围绕这个话题有相当多的讨论 ViewPager PagerAdapter未更新视图 动态更新ViewPager? 从FragmentStatePagerAdapter删除片段 结果是 要么我得到一个空白页(意味着片段已销毁,但未调用)进行替换) 或者整个系统崩溃,可能是因为Android管理碎片实例的方式与我在中保存它们的方式不匹配 这是我的适配器 谢谢!
我正在使用“tabs+swipe”项目,我很难删除一个片段。 我正在做的步骤: 从数据库中删除选项卡 从FragmentStatePagerAdapter数据源中删除选项卡 从操作栏中删除选项卡。 使用支持FragmentManager删除片段。 我的remove方法(从片段内调用): 感谢你的帮助!
我有一个包含FragmentStatePagerAdapter的活动在这个FragmentStatePagerAdapter中有三个片段。或者,当调用适当的getItem()时,它们会被启动。 该活动执行数据密集型任务,完成后发送广播。我已经在FragmentStatePagerAdapter中的每个片段中注册了一个广播接收器。 现在这一切都很好,除了一件事: 当我们滚动到位置2处的片段(位置1和
centOS上的elasticsearch 1.7.x 我们的三节点集群变成了两节点集群。一切都很好。每个碎片我们都有3个复制品,所以我们都有了。 但现在集群运行状况是黄色的,我们有: 我们已经将ElasticSearch.yml中的副本计数设置更改为1(从2)并在两个节点上重新启动ES。这没有什么区别。 下一步是什么? 我看到了如何重新分配碎片,但没有看到如何消除未分配的碎片。
用于从不存在的VM中删除磁盘的所有在线说明都与旧的Azure UI有关,该UI不包含与新门户相同的菜单命令。因此,我需要使用新的Azure管理门户删除孤立磁盘的说明。旧门户的说明对此操作毫无价值。
这不起作用,我只需要在requestSpecification中清除Cookie