问题标签 [fragmenttransaction]

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 投票
34 回答
372230 浏览

android - IllegalStateException:在使用 ViewPager onSaveInstanceState 后无法执行此操作

我从市场上的应用程序中获取用户报告,并提供以下异常:

显然它与我不使用的 FragmentManager 有关。stacktrace 没有显示我自己的任何类,所以我不知道这个异常发生在哪里以及如何防止它。

记录一下:我有一个 tabhost,在每个选项卡中都有一个 ActivityGroup 在活动之间切换。

0 投票
1 回答
3549 浏览

android - 当父 Activity 的状态一定要保存时,如何处理 Fragment 事务?

我的应用程序有几个片段和活动。在主要父活动的生命周期中,应用程序在其他活动中向用户提供信息/选项。

Fragments 的文档对 commit() 有以下规定:

注意:您只能在活动保存其状态之前(当用户离开活动时)使用 commit() 提交事务。如果您在该点之后尝试提交,则会引发异常。这是因为如果需要恢复活动,提交后的状态可能会丢失。对于丢失提交没关系的情况,请使用 commitAllowingStateLoss()。

问题是在返回父活动后,我不能再使用 FragmentTransactions,这是我在应用程序中设计导航方式不可或缺的一部分。

我想到的一种解决方案是将我的活动更改为片段,但是我的应用程序最终也将使用应用内计费,我相信这将始终启动自己的活动。这似乎是一个巨大的限制——在开发的某个阶段,我最终将不得不显示一个单独的活动。

我可能会使用 commitAllowingStateLoss() 侥幸逃脱,但我觉得我错过了 Android 平板电脑应用程序开发中的一个主要概念。有没有办法在不失去提交 FragmentTransactions 的能力的情况下启动活动然后返回父活动(管理片段)?

0 投票
1 回答
2675 浏览

android - 片段内的 ViewPager 在 transaction.remove() 后消失(维护实例?)

我正在使用带有 v4 包的 Google API 8(Android 2.2)。

你好,这是我的问题:

我有一个 FragmentActivity,它有一个始终停留在屏幕上的菜单和一个小容器(一个 FrameLayout),我在其中放置了许多片段。当我隐藏和显示片段时,我的应用程序运行良好,但在我加载所有片段后它崩溃了,因为我的内存有限。在这种情况下,我必须在加载其他片段时删除一些片段,因此应用程序不会崩溃。但是这里出现了另一个问题,我的寻呼机在我删除它们后不会重新加载,所有其他片段都可以正常工作。只有我的寻呼机没有显示,它们没有崩溃,只是消失了。这里有一些代码可以让您了解我的问题是什么:

MyFragmentActivity.java 有这样的布局:

在那个 FrameLayout 中,我放置了所有的片段。寻呼机片段就是其中之一,它的布局如下所示:

我实现了这个抽象类AbstractPagerFragment

这使用了我的PagerAdapter,它看起来像:

现在,让我们实现我的AbstractPagerFragment

好的,现在我像这样从我的内容(FrameLayout)中添加它(myFragment 是一个 PagerFragment,myTag 是一个字符串,代表我定义的它的标签):

这就是我删除它的方式:

但是当我导航回菜单中的片段后它应该再次加载时,使用我第一次使用的相同方法(上面的代码),寻呼机不再显示。谁能解决这个问题?

如果您阅读了所有这些内容,谢谢,您是冠军。

0 投票
3 回答
12954 浏览

android - FragmentTransaction 没有做任何事情

我正在学习片段,下面给出的是我的第一个片段程序。一个简单的项目,我有 2 个屏幕。当我单击第一个屏幕的下一个按钮时,需要显示第二个按钮。

在此处输入图像描述

我的目标是 Android 2.1 及更高版本并使用兼容性包

AppMainFragmentActivity.java

app_main_layout.xml

FirstFragment.java

first_fragment_layout.xml

SecondFragment.java

second_fragment_layout.xml

好吧,我得到了第一个屏幕。现在,

根据我对片段的理解,我所期望的

  • 当我单击屏幕 1 中的 Next 按钮时,将创建 SecondFragment,onCreate()onCreateView()调用它。
  • 显示了 SecondFragment,并且 FirstFragment 被销毁(因为我没有将它添加到 backstack)。由于默认片段事务没有动画,因此不会有任何动画。

怎么了

  • SecondFragment 被创建好了,它onCreate()onCreateView()调用了。
  • 但 FirstFragment 仍然在屏幕上,第二个从未显示。

现在我对片段的理解可能是错误的。但我相信当我们 commit() 一个片段事务时,第一个片段应该被第二个片段替换(第一个片段要么被隐藏要么被破坏)。好吧,似乎什么都没有发生。这是为什么?我们应该手动销毁/隐藏第一个片段吗?

注意:我知道对于这样一个基本的事情来说这是一个很长的问题。但是我把我的整个代码都放了,因为我不确定我在哪里搞砸了。

0 投票
1 回答
2621 浏览

android - 以编程方式添加的片段上的后退键导致空容器

我有一个碎片化的布局问题,如果之前已经回答过,我真诚地道歉,我太笨了,找不到它。我搜索了好几个小时却一无所获(好吧,我得到了很多但没有解决我的问题)。

所以这是我的设置:我有一个两个窗格布局,使用两个 FrameLayouts 作为我的片段的容器。活动列表.xml:

打开应用程序时(片段活动中的 onCreate),使用 FragmentTransaction 以编程方式将名为 Listing 的片段添加到 FrameLayout“列表”中。

这个 ListingFragment 在运行时被替换了几次,所以我必须创建它而不是在 XML 中定义它。我尝试了后者

但是以后不会以编程方式替换或删除它。我只能 add() 然后旧的通过新的可见。但这不是这里的问题 - 只是对我的方式的解释。

到目前为止,所有这些都正常工作,创建和显示列表等,所以那里没有问题。但:

当ListingFragment在启动时显示并且我按下返回键时,在最后一个位置FrameLayout“列表”被清空而不是回到主屏幕!我认为这一定是因为我的 ListingActivity 的 onCreate 我显示了一个空框架并向其添加()一个 ListingFragment。所以后栈中也有空帧。对?

我尝试通过这个来解决ListingActivity的情况:

但不知何故,这看起来或感觉不对……它看起来像是一个糟糕的解决方法。

那么有什么方法可以在带有空 FrameLayout 的视图膨胀之前插入片段,因此没有空状态可以“返回”到?或者是否可以从后台堆栈中删除“空”状态,即使它不在其中?关于如何在点击“后退”后避免空框的任何其他想法?

非常感谢您提前付出的努力!

0 投票
1 回答
764 浏览

android - 屏幕方向更改后错误的替换片段视图

应用程序具有与父级匹配的框架布局容器的片段活动。用户与碎片 ui 交互,它们相互替换,将 old 放入 backstack,例如:A -> B -> C -> D -> E -> F

当用户改变手机方向时,例如,在fragment D上并想去fragment E,fragment A的视图显示,如果用户在这个fragment A中按下某些东西(通常会去fragment B),fragment F的视图显示。

屏幕方向更改后如何显示片段 E 而不是 A?

应用程序使用最新的 android 支持库,这发生在 android 4.1 模拟器和 android 2.3 手机(未测试其他 android 版本)。

所有片段都有这个 go next 片段方法:

编辑

在fragment D上旋转屏幕时,所有旋转正常并显示fragment D的视图。如果用户使用上述方法转到fragment E旋转后,显示的是fragment A的视图而不是E。如果用户旋转手机fragment E显示一般。

0 投票
2 回答
1973 浏览

android - 单击列表项时如何进行片段交易?

我有一个活动,其中包含一个 ActionBar(带有四个选项卡),一个片段分别分配给每个选项卡。在这些片段中,我分配了一些填充了字符串值的 ListAdapter,这些值是我想要操作的可点击的。单击一个项目时,我希望该应用程序从该片段发送到另一个。我知道我必须使用 FragmentManager() 和 FragmentTransaction() 但由于我是 Android 开发新手,我需要任何形式的帮助,感谢您的帮助。

这是其中一个选项卡(UserFragment.java)的片段代码:

Profile.java 活动代码:

0 投票
1 回答
108 浏览

android - 在 Eclipse 上加载 ActionBarSherlocks 的演示时出错

我试图在 ActionBarSherlock 上加载演示,但使用FragmentTransaction. 活动是FeatureTogglesTabNavigation。我也遇到了一个错误,TabNavigationCollapsed因为它正在扩展TabNavigationwhich uses FragmentTransaction.

错误是:

我的错误可能是什么?我的项目构建目标是 Android 4.0。

0 投票
1 回答
1494 浏览

android - 如何频繁添加和删除相同的片段

我的应用程序通常会多次添加然后删除相同的片段。下面是我如何做到这一点:

Add fragment

Remove fragment

问题是,有时当从包含该片段(HomeFragment)的活动导航到另一个活动时,我的应用程序崩溃了。我试图找出原因,但仍然没有办法。我这里没有完整的错误日志,因为此错误不经常发生,但错误与此相同https://android.googlesource.com/platform/frameworks/support/+/5506618c80a292ac275d8b0c1046b446c7f58836%5E!/

有没有人看到我的代码有任何问题,或者只是知道如何解决这个错误,请帮助我。谢谢大家。

0 投票
2 回答
12401 浏览

android - 将 Android 片段移动到不同的容器无法更改片段的容器 ID

这是我希望我的应用程序在平板电脑上执行的操作。片段 (0) 有一些菜单可以显示片段 (1)...(n),如下所示:

Fragment0 从不移动,其他的都向右移动。离开右侧边缘的碎片将被销毁。

因此,我使用水平 LinearLayout 设置了我的 XML 布局,并包含 4 个具有正确 ID 的 FrameLayout(fragment0...fragment3)

我可以实例化并显示fragment0,然后显示fragment1,但之后我无法将其向右移动,我得到:

我发现的唯一相关问题是这个那个,尝试了所有不同的解决方案,但没有运气。

尝试,FragmentTransaction.remove()然后.add()尝试.replace(),以不同的顺序尝试它们并在中途提交(甚至尝试按照某人的建议提交两次),尝试调用addToBackStack()......仍然没有运气。

问题是是否可以像这样使用 FragmentTransaction 移动片段。如果是的话,我做错了什么(还有奖金,是否可以制作动画?)。如果不是,那么实现这一点的正确方法是什么?

请注意,我不想每次都重新实例化片段(每个片段都会在网络上进行一些可能需要一些时间的查询)。可以将所有数据提取回活动以重新创建一个,但如果可能的话,我宁愿不这样做......