是否可以在FragmentPagerAdapter
中保留为FragmentPagerAdapter
创建的每个片段的实例?
类似于:
@Override
public Object instantiateItem(ViewGroup container, int position)
switch(position){
case 0:
fragment0 = super.instantiateItem(container, position);
return fragment0;
case 1:
fragment1 = super.instantiateItem(container, position);
return fragment1;
default:
return super.instantiateItem(container, position);
}
}
我会遇到内存问题吗?
这个想法是做一些类似MyFragmentPagerAdapter.fragment0
的事情,以便获得对片段的引用。
这种方法的问题在于,即使您维护了一个引用,FragmentManager也可能会创建一个片段的新实例。在这种情况下,同一片段的多个实例将在内存中(泄漏),并且您维护的引用目标是一个可能甚至无法显示的实例。所以换句话说,它不安全。
然而,安全的做法是在你的片段中维护一个你的活动的引用。
在你的片段中,你覆盖
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
home = (YourFragmentActivity) activity;
}
public void onCreate(Bundle savedInstanceState) {
home.setThisFragTag(getTag());
}
在你的片段活动中
public void ThisFragTag(String tag) {
this.fragTag = tag;
}
现在,在您的活动中,您可以保留当前显示的片段实例
(YourFragmentClass) getSupportFragmentManager().findFragmentByTag(fragTag);
您可以对几个片段重复此操作
我有一个带选项卡指示器的viewPager。ViewPager是带有FragmentPagerAdapter的setAdaper。 我几乎不了解FragmentPagerAdapter的内部是如何工作的。我注意到邻居片段被恢复(调用OnResume),即使邻居还不可见。 我把更新方法放在OnResume中,以为片断是最新的,它就会更新。 广告横幅刷新 我希望页脚中设置的广告横幅在向左滑动一次或向右
我有一个导航抽屉项目,我只是从“创建新项目”修改 下面是我用来显示所选片段的代码的一部分: 编辑:这个问题用导航抽屉保存片段状态是我解决问题的最接近的方法,但答案太简单了。。我对Android开发还很陌生。有人能帮忙吗?
我有一个带有fagmentpageradapter和viewpager的parentfragment。每个页面显示另一个包含imageview的片段。为了避免outofmemoryerrors,我只希望当前显示的片段在imageview中加载其图像。因此,我必须在当前显示的片段中加载imageview,并回收未显示片段中的图像。 父片段: 碎片PageRadapter: 分页器显示的片段: 在适配
问题内容: 我在SO上发现了许多类似问题的实例,但不幸的是,没有答案符合我的要求。 我对人像和风景有不同的布局,并且我使用的是后向堆栈,这既妨碍了我的使用,又使我无法使用配置更改例程。 我在TextViews中向用户显示某些信息,这些信息不会保存在默认处理程序中。当仅使用“活动”编写我的应用程序时,以下方法运行良好: 使用,这仅在非常特殊的情况下有效。具体地说,令人震惊的是替换片段,将其放回堆栈中
问题内容: 我正在尝试使用setRetainInstance(),但似乎对我不起作用!=(。我将问题简化为最简单的版本: 我有一个带有TextView和Button的片段。 当按下按钮时,TextView的初始文本为“我在等待”,文本变为“ Hello!”。 那是我的代码: 片段: 活动: 活动的布局: 片段的布局: 但是当我播放它时,按下按钮并更改设备的方向,文字将被重置。 我想念什么?我该如何
场景我试图实现的目标: 使用两个框架容器加载活动(用于项目列表和详细信息) 在应用程序启动时,在listFrame中添加listFragment,在detailsFrame容器中添加一些初始infoFragment 在列表项中导航,而不将每个细节事务添加到后堆栈中(只希望在堆栈中保留infoFragment) 一旦用户点击后退按钮(向后导航),他就会返回到初始信息片段,即在启动时添加的信息片段 如
最后,这里是Fragment类