我有个问题。我有一个片段,里面包含了viewpager。对于viewpager,我使用FragmentPagerAdapter扩展。每个寻呼机片段内部都有回收器视图。问题是,在viewpager的
recycler视图中旋转屏幕后,我无法恢复滚动位置。我原以为问题出在回收视图中,但很快我发现,在屏幕旋转后,viewpager中的片段正在重新创建,所以调用了onCreate()和onDestroy(),即使他们不应该这样做。我还尝试使用onSaveInstanceState(bundle)
,发现在onCreateView()中,这个bundle总是空的。那我该怎么办?这个话题对我没有帮助。
那两个超驰应该能解决你的问题
在这里保存您的值
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
}
在这里你可以恢复它
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
}
您可以使用空状态覆盖PagerAdapter中的功能。
override fun restoreState(state: Parcelable?, loader: ClassLoader?) {
super.restoreState(null, loader)
}
嗯,我找到了答案。问题出在我身上)。有层次结构:MainActivity具有fragment-PagerFragment的框架布局,其中包含viewpager-viewpager内部的片段。问题是,在activity i内部的屏幕旋转之后,总是在替换PagerFragment,例如:
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragment = new PagerFragment();
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.commit();
但我应该这样做:
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if (fragment == null) {
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragment = new PagerFragment();
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.commit();
}
这完全是我的错,我很惭愧。对不起。
在需要动态添加和从viewpager中删除列表片段的应用程序中工作,当点击列表中的一个项目时,新的片段会添加到viewpager中,当需要删除swipe back片段时,这工作效果很好,但当我旋转屏幕时,页面中的片段会有两个实例,再旋转一次,实例会增加四倍。 同时,我需要持久化片段的状态(列表位置、加载的项数等),这意味着重写片段中的onsaveinstancestate并将相关数据保存在捆绑包中
我搜索了很多信息,但没有一个明确的。有人能给出一个明确的解决方案和一个例子吗?
问题内容: 片段对于将UI逻辑分为一些模块来说似乎非常好。但是随着它的生命周期,我仍然迷茫。因此,非常需要大师的想法! 编辑 请参阅下面的愚蠢解决方案;-) 范围 主要活动有一个带有片段。这些片段可以为其他(子主)活动实现一些不同的逻辑,因此片段的数据通过活动内部的回调接口填充。并且所有功能在首次启动时都正常,但是! 问题 重新创建活动时(例如,在方向更改时),的片段也是如此。代码(您将在下面找到
在我的应用程序中,fragment活动包含两个片段,片段A和片段B,fragment B是一个包含3个片段的视图分页器。 在我的活动中,为了防止在配置更改时重新创建片段: 片段B的代码: 显然,在每次轮换时都要这样做: 这会导致整个寻呼机被重新创建,对吗?结果是 将在每次循环时被调用,碎片将从头创建并失去状态: 在中,但其结果是,在循环时,页面中的片段被移除。 有什么想法如何正确地保留在寻呼机内的
我想创建带有PagerView的片段,但运行以下代码会返回一个IllegalStateException: 源代码: IllegalStateException: 进程:com.company.user.blabla,pid:22256 java.lang.illegalstate异常:带有适配器的ViewPager com.company.user.blabla.fragments.homeFr
我正在尝试使用NavigationDrawer创建活动,并且在一个片段中,我想放置ViewPager。问题是,当我试图创建新的SectionPagerAdapter(类扩展FragmentPagerAdapter)时,我无法为构造函数获得正确的FragmentManager。 有 navDrawer fragment 的 onCreateView 代码,我想在其中放置 ViewPager: Sec