- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 SDK 19,第 13 分钟和 support.v4.app fragment 。
我搜索过 SO 并找到了应该有帮助的类似线程,但我尝试的一切都没有解决我的问题。此外,许多人似乎遇到了 ViewPager 在他们不希望重启时重启的问题,而我的问题似乎恰恰相反。
这些帖子似乎对我没有帮助:
PagerAdapter start position
ViewPager PagerAdapter not updating the View
How to force ViewPager to re-instantiate its items
这是我的设置:
内存中的一个 (support.v4) fragment ,其中包含一个 ViewPager,从布局文件中扩充,因此未以编程方式添加。 Fragment 本身不会被重新创建,而是在应用程序的整个生命周期内保存在内存中;它正在附加/分离到根 FragmentActivity 的 FragmentManager。
当用户在应用程序生命周期的某个时间访问此 Fragment 时,它会被附加并调用 onCreateView,我在其中找到 ViewPager 的 ViewById 并为其分配一个新的 FragmentStatePagerAdapter。
这是我的问题:
用户第一次访问此寻呼机时,一切正常。下次他们访问它时,我希望它从第 0 页“重新开始”,这意味着我希望无法立即向左滚动,但必须开始向右滚动。我还希望 FragmentStatePagerAdapter 的 getItem() 从位置 0 开始。我基本上希望它的功能与用户第一次访问它时相同。然而,事实并非如此。
我已经尝试了几件事,但它似乎总是从我离开它的页面的前一个索引开始。因此,如果我第一次滚动 5 页,然后离开 Fragment 并稍后返回,则 ViewPager 从同一页面索引开始,这意味着我可以向左滚动 5 页。我不想要这个。
可能与内部存储页面的ViewPager或FragmentStatePagerAdapter有关,没有发布。但我认为我尝试过的注释掉的代码会做到这一点。可能还有另一种我没有尝试过的方法。也许这与不重新创建我的 fragment 有关,但在我的架构中此时这样做并不是很好。我希望我可以在不执行此操作的情况下重新启动 ViewPager。
这是我的代码:
我的 Fragment 的 onCreateView 代码。一切都被注释掉了我试过没有成功。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_playscreen, container, false);
//while (getChildFragmentManager().popBackStackImmediate()) {}
mAdapter = new AdapterPlayPages(this, getChildFragmentManager());
mPager = (ViewPlayPager) view.findViewById(R.id.pagerPlayScreen);
//mPager.setAdapter(null);
mPager.storeAdapter(mAdapter);
//mPager.setCurrentItem(0);
//mPager.removeAllViews();
return view;
}
我的 ViewPager,它已被重写以解决一个完全不相关的错误,如这里所建议的:https://stackoverflow.com/a/19900206/1002098 .这不会影响问题;我删除了这些更改,以便我可以按照建议调用 setAdapter(null),但它没有解决我的问题。
public class ViewPlayPager extends ViewPager
{
PagerAdapter mPagerAdapter;
public ViewPlayPager(Context context)
{
super(context);
}
public ViewPlayPager(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
protected void onAttachedToWindow()
{
super.onAttachedToWindow();
if (mPagerAdapter != null)
{
//super.setAdapter(null); // did not help
super.setAdapter(mPagerAdapter);
}
}
@Override
public void setAdapter(PagerAdapter adapter)
{
// do nothing
}
public void storeAdapter(PagerAdapter adapter)
{
mPagerAdapter = adapter;
}
}
我的 FragmentStatePagerAdapter。我删除了一些不相关的逻辑和成员。
public class AdapterPlayPages extends FragmentStatePagerAdapter
{
private FragmentPlayScreen mParent;
public AdapterPlayPages(FragmentPlayScreen parent, FragmentManager fragmentManager)
{
super(fragmentManager);
mParent = parent;
}
@Override
public int getCount()
{
// some logic from parent to determine true count
// the count shouldn't effect the position to start at
return Integer.MAX_VALUE;
}
@Override
public Fragment getItem(int position)
{
// logic to determine type of page to display,
// which is not changing based on position at the moment
return new FragmentPlayPage();
}
// this did not seem to help me
//@Override
//public int getItemPosition(Object object)
//{
// //return super.getItemPosition(object);
// return POSITION_NONE;
//}
}
最佳答案
我必须更改架构以重新创建 fragment - 从 FragmentManager 添加/删除它们,而不是在内存中附加/分离它们。
我不清楚为什么必须重新创建 Fragment 才能重置 ViewPager。 Android FragmentManager 和 FragmentTransaction 支持将 fragment 保存在内存中并简单地附加/分离它们,或显示/隐藏它们,因此应该可以简单地从内存中 fragment 的 onCreateView 事件中重置 ViewPager,但同样,没有任何注释掉的调用以上似乎有效。
如果其他人有解决方案,我仍然会考虑。这将帮助我理解这个问题。
关于android - 将 ViewPager + FragmentStatePagerAdapter 重新启动到项目 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24918090/
我正在使用 this example 处理 FragmentStatePagerAdapter . MyAdapter 类实现如下: public static class MyAdapter ext
当我使用 FragmentStatePagerAdapter 扩展我的适配器并使用 fragment 管理器和常量 BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 传递参数
我在使用 FragmentStatePagerAdapter 管理更改的项目列表时遇到问题。请查来源here . 问题是,当底层列表更改时,并且我调用 notifyDataSetChanged,适配器
我正在实现FragmentStatePagerAdapter并且我想要一个可拖动的标题。每个 fragment 的标题都可以像寻呼机效果一样进行交互。用户可以拖动或浏览所有 fragment 的tit
我已经实现了一个在 viewpager 中显示 fragment 的 Activity 。该 Activity 最初显示给定类型(类型 A)的 5 个 fragment 。每个类型 A fragmen
我知道还有其他几篇关于此主题的帖子,但我想粘贴我的代码,因为我相信其中可能存在导致我出现问题的错误。我的 FragmentStatePagerAdapter 返回了错误的位置,我不确定为什么。 这是我
在我的主要 Activity 中,我有多个 fragment ,您可以通过底部导航进行导航(替换主要 Activity XML 中的 FrameLayout 容器) 其中一个 Fragment 包含一
我有一个 ViewPager+FragmentStatePagerAdapter 主机 Activity ,它让我可以浏览一组 fragment (同一 ItemFragment 类的不同实例),并且
我在我正在开发的应用程序中遇到了 OutOfMemoryErrors,我很难弄清楚如何修复它以及到底是什么问题。我正在使用 FragmentStatePagerAdapter,因为这似乎是最佳/推荐的
我想知道是否可以在没有支持库的情况下使用 FragmentStatePagerAdapter 类或其等效类? 我知道如何使用 native fragment 来代替支持库中的 fragment ,并且
我有一个 ViewPager,其中的页面数是动态的。每个页面都需要从数据库读取并显示该页面的数据集。 我将当前选定的页面标题与数据库“用户名”中的第一个值进行比较,以检查数据是否与该页面相关。 我的
我正在尝试在 View 页面中显示一些 fragment 。我使用从 NavigationDrawer 启动 PlanFragment FragmentTransaction transaction
我正在学习教程 here它使用带有 FragmentStatePagerAdapter 的 TabLayout。一切都很好,除了我需要禁用我的第二个选项卡上的滑动,因为它使用水平滚动。如果所有选项卡都
Noob android 开发者的问题 问题缺失: 我正在尝试实现无限滚动功能,当 FragmentStatePagerAdapter 到达最后一项时通过网络请求加载更多数据,目前我将 getCoun
我有一个 ViewPager,其中包含 Fragment。 ViewPager 有一个适配器 FragmentStatePagerAdapter 适配器的 getItem 方法。 @Override
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我创建了一组水平选项卡,对于每个选项卡内容,它都有一个 View 分页器,它又允许滑动 View 的内容。 我目前正在将其编码为适配器中的 3 个 View ,并返回一个新的内部 fragment ,
我有一个名为 MainActivity 的 Activity ,它有一个 ViewPager 和一个 TabLayout。 ViewPager 有 4(四)个 fragment 绑定(bind)在那里
我想要实现的目标: 带有 ViewPager 的 Activity,显示适配器中对象列表的 fragment (FragmentStatePagerAdapter)。 最初,Activity 将 SQ
我在我的单一 Activity 应用程序上使用嵌套的 FragmentStatePagerAdapter。当前布局是: Activitiy - Login Fragment - Master
我是一名优秀的程序员,十分优秀!