问题标签 [fragmentstatepageradapter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - FragmentStatePagerAdapter 内存泄漏(带有 viewpager 的嵌套片段)
我的适配器中有“内存泄漏”(后面会解释引号)。我目前正在使用嵌套片段来托管 viewpager。
我的设置如下:
1. Activity(承载 Fragment A 的空活动)
2. Fragment A - 承载带有 Fragmentstatepageradapter 的 viewpager 的片段。每个 viewpager 页面都承载片段 B。
3. 片段 B - 包含图像视图的片段。
除非发生配置更改,否则一切正常。监控堆,每次轮换似乎都会增长 100 kb。手动 GCing 不会释放内存。
我尝试过的事情:
1. 用空白片段替换片段 B - 发生同样的问题,所以不是导致问题的图像视图。
2. 删除片段 A 和 B 并旋转活动。没有发生内存泄漏,所以它不是活动。
3. 在任何方向改变之前和旋转大约 50 次之后使用 MAT 来获得堆。MAT 显示 1 个主要嫌疑人是我的适配器类。它显示了 7MB 的保留堆(非常小的浅堆)的观察者,如下所示:
为什么我在片段中使用 viewpager:
1. 我想通过设置 setretaininstance(true) 来保持适配器的状态以及与 viewpager 相关的其他变量。
2. 配置更改后,我没有重新创建适配器,而是使用旧适配器附加到 viewpager。
3.如果我不重用旧适配器而是在配置更改后创建新适配器,内存泄漏就会消失。
4.我关闭活动并返回上一个活动后,内存泄漏也消失了。
有任何想法吗?将不胜感激任何帮助。
谢谢,JC
android - FragmentStatePageAdapter:多个项目同时可见 - 如何使特定页面居中?
我想同时使用 aFragmentStatePageAdapter
并显示 3 个项目。这可以通过覆盖getPageWidth()
-Method 来完成:
这很好用。但我的问题是我现在希望将居中的页面放在焦点上。目前左页是焦点...
我已经将问题可视化:
目前:
期望:
Desired 2(如果滚动到最后):
你有什么建议?
android - Android ViewPager 获取视图空指针异常
我有 support.v4 ViewPager,我使用FragmentStatePagerAdapter填充片段。
ViewPager 中片段的显示按预期工作,但问题是getView()
在 FragmentActvitiy 类中调用函数时获取片段视图。我可以访问所有 15 个片段并获取参数等,但是当在片段上调用 getView() 函数时,我得到一个空指针异常,因为第三个片段 getView() 是null
。
输出:
FragmentStatePageAdapter 类代码:
片段类代码:
FragmentActivity 类代码:
我已经阅读了许多 SO 问题/答案,但我不知道可能出了什么问题。
android - Android ViewPager 和 FragmentStatePagerAdapter 保存视觉元素值
在我的FragmentActvitiy中,我使用的是ViewPager,我使用FragmentStatePagerAdapter填充它。
当我尝试访问片段视图以获取/更新视觉元素时,我得到一个空指针异常。我可以访问所有片段及其参数,但它们的视图返回 null。
我知道 FragmentStatePagerAdapter 删除视图以管理内存资源,并且我不应该访问 FragmentActivity 中的视图。
我的问题是存储/操作片段视觉元素的适当方式是什么?
我是否应该OnPageChangeListener
在我的 ViewPager 类中实现并以某种方式将片段值存储到 SharedPreferences 而不是重新创建它们 - 在哪里?
android - 回滚时出现 ViewPager NullPointerException
我有一个水平 ViewPager(我们称之为 A),它在每个页面中都包含一个片段。每个片段都有一个垂直的 ViewPager(我们称之为 B),每个页面都包含一个带有一个图像的片段。当我向右滚动 A 时一切正常,但是当我向左滚动时(我猜是在 viewpager B 恢复的那一刻)应用程序崩溃,这是 logcat 信息:
水平 ViewPager A:
ViewPager A 和 B 使用相同的 FragmentStatePagerAdapter
ViewPager B:
最后,ImageFragment
谢谢你的帮助。
android - 在 viewpager 中更改当前片段的背景图像
我在查看器中有 4 个片段。和我的 viewpager 所在的活动中的 FragmentStatePagerAdapter。FragmentStatePagerAdapter 的 newInstance() 方法将布局 id 作为参数,因此每个片段都有自己的布局:
这是第一个片段:
和activity_main.xml:
和 newInstance 参数之一 fire_room_wall1.xml:
//其他一些子视图
//其他一些子视图
现在在我的程序中的某个时刻,我想更改当前片段布局的背景图像。我试图这样做:
但是“ ((BitmapDrawable)page.getView().getBackground()).getBitmap().recycle();
”行返回 NullPointerException 因为page.getView().getBackground()
是空的。我做错了什么或如何更改背景图片?PS 由于某种原因 page.getView() 的类型是 NoSaveStateFrameLayout,而不是人们期望的 RelativeLayout
android - 将新适配器分配给我的 ViewPager 时应用程序崩溃
当应用程序启动时,我有一个ViewPager
由 a 填充的:FragmentStatePagerAdapter
这可以正常工作。
现在,当用户更改应用程序的设置时,我想为 ViewPager 分配一个新的适配器,如下所示:
updateObserver
不幸的是,应用程序在调用此异常后崩溃:
01-22 23:22:45.957:E/AndroidRuntime(13131):致命异常:主要 01-22 23:22:45.957:E/AndroidRuntime(13131):java.lang.IllegalStateException:密钥 f0 的片段不再存在:索引 0 01-22 23:22:45.957: E/AndroidRuntime(13131): 在 android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:575) 01-22 23:22:45.957: E/AndroidRuntime( 13131): 在 android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211) 01-22 23:22:45.957: E/AndroidRuntime(13131): 在 android.support.v4.view.ViewPager.onRestoreInstanceState (ViewPager.java:1281) 01-22 23:22:45.957: E/AndroidRuntime(13131): 在 android.view.View.dispatchRestoreInstanceState(View.java:13188) 01-22 23:22:45.957: E/AndroidRuntime (13131): 在 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2850) 01-22 23:22:45.957: E/AndroidRuntime(13131): 在 android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2856) 01-22 23:22:45.957: E/AndroidRuntime(13131): 在android.view.View.restoreHierarchyState(View.java:13166) 01-22 23:22:45.957: E/AndroidRuntime(13131): 在 android.support.v4.app.Fragment.restoreViewState(Fragment.java:425) 。 ..
如何在ViewPager
不崩溃应用程序的情况下将新适配器分配给?
android - Replace fragment in viewpager is not working
In my project i am using actionbar with swipeable threefragments(tabs with viewpager), i am trying to replace one of the fragment with fourth fragment, but iam not able to get it..
Below is my layout
My adpater
nNot sure where i am going wrong.Any help is appreciated.
android - 如何在 FragmentStatePagerAdapter 中动态添加页面
我知道这个问题问了很多次,但经过多次研究后我没有得到回答。在我的主要活动中,我有一个视图寻呼机,并为此设置了一个适配器:
我的主要活动中有适配器类,例如私有类:
最后我有一个片段类,可以为视图 pager 中的每个页面扩展我的布局。它具有图像视图和文本以及...:
这是每个片段的布局:
在我的主要活动中,我有从图库中获取图像并保存在目录中的按钮。我应该在 onActivityResult 中更新我的适配器,但我收到了这个错误:
02-03 19:30:21.567: E/AndroidRuntime(3407): java.lang.IllegalStateException: 应用程序的 PagerAdapter 在没有调用 PagerAdapter#notifyDataSetChanged 的情况下更改了适配器的内容!预期的适配器项目数:1,找到:2 寻呼机 ID:com.sober.secret:id/pager 寻呼机类:android.support.v4.view.ViewPager 有问题的适配器:com.example.test.MainActivity$ScreenSlidePagerAdapter
但在应用程序崩溃后,我的图像正确显示。我尝试 notifyDataSetChanged() 但没有成功,我尝试了 stackoverflow 中的任何解决方案。