问题标签 [fragmentmanager]

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.

0 投票
1 回答
1423 浏览

android - 将 Fragment 添加到具有相同 ID 的容器中

我有一个 ViewPager 来实现“持有人”片段之间的滑动。在它们内部,我需要将多个片段添加到它们各自的容器中。

问题是,我正在使用FragmentTransaction.add(containerID, fragment);,但由于 ViewPager 中有多个持有者片段,所有片段都被添加到同一个持有者片段上,而不是在调用添加它们的那个片段中。

任何人都知道解决这个问题的好习惯吗?

这是我在持有者片段中添加片段的代码。

0 投票
2 回答
1700 浏览

java - java.lang.IllegalStateException:活动已在创建日期选择器对话框时被破坏

我正在尝试使用从我的主 Activity 创建一个 DatePicker 对话框DialogFragments。我已经扩展了 DialogFragment 类并根据返回新的 datePickerDialog

http://developer.android.com/guide/topics/ui/controls/pickers.html

这是我的课程代码:

我在主 Activity 上有一个按钮来触发对话框:

但是,当我尝试单击该按钮时,在下面的行中出现“java.lang.IllegalStateException:Activity 已被破坏”异常:

这是活动日志:

对此的任何帮助将不胜感激。

谢谢。

0 投票
2 回答
17453 浏览

android - 如何在单击导航抽屉上的项目时打开不同的活动?

我刚开始一个新的应用程序,一开始我选择了导航抽屉选项,eclipse IDE 为我提供了导航抽屉的完整代码,它也在运行。

但是在单击其项目后,它只会增加 xml 中存在的数值。

我想点击滑动菜单打开不同的活动。

我在代码中编辑它的地方。假设我有 5 个类与 5 个不同的 xml 链接,那么如何在单击导航抽屉中的项目时在屏幕上为它们充气,就像按钮工作一样。我是这个新手,请指导我并告诉我在哪里可以编辑

MainActivity.java

NavigationDrawerFragment.java

0 投票
0 回答
975 浏览

android - 更换Fragment后,Activity依然检测到Fragment可见

我有一个Activity主机很多Fragments。在Fragment A中,当用户按下后退按钮询问他们是否确定是否要离开此片段时,我正在添加一个对话框。我在 Activity 中添加了这段代码onBackPressed来控制它:

并且对话框在片段 A 中完美运行,但是当它离开片段 A 并使用以下代码进入片段 B(相同的活动)时:

然后我按下片段 B 中的后退按钮,它再次显示相同的退出对话框。

因此,从我的代码中可以看出 FragmentA 不是 null 并且即使在我执行该Replace函数之后仍然可见。

为什么用 Fragment B 替换 Fragment A 仍然可见?

0 投票
1 回答
159 浏览

android - 带有图像的 viewpager 可以工作,但后退按钮图像不显示

我有一个带有图像片段的viewpager,它可以工作,但在后面收到一个错误,说没有空的构造函数。我做了一个,但现在我的图像没有显示,因为 imageResourceId 为空。我已经尝试了一百万件事,但无法弄清楚。

在活动中

0 投票
1 回答
72 浏览

android - FragmentManager 和 ScreenOrientationChanging

我有 1 个活动、2 个纵向和横向布局以及 2 个片段。

在纵向布局中只有 1 个片段,在横向布局中有 2 个片段并排。

当我一开始以纵向模式运行活动时,fragmentmanager 说只有 1 个片段可以。然后我改变了方向,fragmentmanager 说有 2 个片段了,这也没关系。但即使我将方向从横向更改为纵向,fragmentmanager 仍然说有 2 个片段。问题是它是否需要在每个新的 oncreate 中删除它拥有的所有片段?如果活动使用纵向布局创建,如何每次只提供 1 个片段?

0 投票
1 回答
309 浏览

android - 重新进入时没有更换碎片

我已经为此困扰了两天了:

1 个活动,3 个片段(A、B 和 C)。B 和 C 是选项卡。如果我用 B 替换片段 A 并将 A 添加到后堆栈,如下所示:

当我从片段 C 中点击向上插入符号并执行以下操作时:

然后使用第一个代码片段重新输入 B,不调用 A 的 onPause() / onStop() 并且两者都绘制在 one-another 的顶部。有谁知道这可能是什么原因?

我已经提交了一份错误报告,因为我真的不确定为什么会发生这种行为,它位于此处

0 投票
1 回答
163 浏览

android - Activity 在替换 Fragment 时被破坏

我是 Android 新手,正在尝试编写一个简单的虚拟应用程序来学习有关创建自己的视图类等的知识。我为什么要这样做?我想要一个由多个页面组成的 UI,可以通过按下操作栏上的按钮进行导航。我现在想添加通过触摸手势导航的功能。然后我遇到了我试图用这个虚拟应用程序解决的问题,它与我的原始应用程序相同,只是更简单一些。

以前的)问题:片段的一侧确实有一个 ScrollView,当您单击它们时,它会吃掉触摸手势。

我读到了这篇文章,发现我必须创建自己的 FrameLayout 和 @Override onInterceptTouchEvent 和 onTouchEvent 方法。我现在使用这个新的 FrameLayout 作为我的片段容器。然而,当我在 FragmentLayout 中使用 ScrollView 而不是 LinearLayout(如本代码示例中)测试应用程序时,它仍然无法正常工作。但在这一点上,这不是我最大的问题,我想我只需要在这两种方法上做一些工作就可以让它们按照我的意愿工作。

此时,当通过触摸手势交换片段时,我的应用程序崩溃......按钮仍然有效。

我收到此错误(LogCat):

这是我的主要活动:

这是我的 DummyFragmentSimpleView (Java):

这是简单视图的 XML:

这是我的 TouchInterceptingLayout 类:

MotionEventHandler 类:

活动主.xml:

我希望有人可以提供帮助,并且我的问题描述不会太混乱,我的问题也不会太愚蠢......;s

提前致谢!

0 投票
1 回答
3889 浏览

android - 删除所有子片段

我有一个片段,其中 xml 包含如下内容:

我需要在我的 xml 中添加 4 个不同的片段。我开始的父片段是这样的:

所以,一切正常,直到我试图显示片段超过 1 次。如果我单击返回并尝试再次打开片段,则会出现以下错误:

我知道问题所在,也有解决方案。我可以删除 onDestroy 中的片段。但是,这我不想做!包含另一个片段的 xml 是动态的。我通过包获取布局,所以在这个片段中我不知道显示的是哪个片段。如果我使用这部分超过 1 次,我必须确定名称是相同的。所以我的问题是:是否有可能删除每个片段中的 ?让每一个fragment都删除自己和parent无关?

感谢帮助

编辑:

这些电话是我从不同的地方打来的。对于每个调用,我可以使用不同的片段制作自己的 xml。在我的父母片段中,我正在这样做:

之后,我的片段加载了包含我在 xml 中设置的所有片段的 xml。那么我可以从外部定义视图吗?从这个片段销毁并重新打开它后,它会抛出错误。这是因为我的 xml 中的所有片段都没有被破坏!我的父片段不知道,哪些片段在 xml 中,所以我想要它们在他们的班级中摧毁自己。

0 投票
0 回答
665 浏览

android - 推送和弹出后台堆栈时保存和恢复 Fragment 的 UI 状态

背景:

我有一个 main Activity,它包装了一个Fragment可以更改的 main ,为了保留一个 backstack 我使用FragmentManager's backstack。

与保留活动堆栈的主要区别在于,当片段被推送到后台堆栈并被替换时,它将调用它onDestroyView()而不是它onDestroy(),当它返回时,它将重新创建它的视图onCreateView()。(但是onCreate()不被调用,因为片段对象没有被释放)

在活动堆栈中它不会发生并且视图仍然存在。

这对低端设备有积极影响,因为 Android 操作系统可以释放一些内存并且您不必保持视图正确(在我的应用程序中来自服务器的消息可能会随时更改视图)因此可以节省宝贵的带宽也是如此。

实际问题:

假设我有一个片段,用户点击某物,它的视图发生了变化,例如展开了一个列表。

如果用户随后转到另一个屏幕(即片段),则前一个片段将被推送到后台堆栈,并且它的视图将被销毁。

当用户返回时,片段将被重新创建,并且不会“记住”用户所做的更改,例如列表不会按应有的方式扩展

那么如何在不为每个视图制作特殊情况的情况下保存状态并恢复它呢?

不受欢迎的答案:

  • 保持视图活着:做一些事情来保持视图会破坏片段效率
  • using onSaveInstanceState():当片段被推送到后台堆栈时,它不会被调用,因为活动没有被破坏并且这不是配置更改。
  • 特殊对象:如果系统有办法为您做,请不要做。