- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在我的小型 Android 应用程序中,我有一个包含 3 个页面的 ViewPager
,每个页面包含一个 fragment ,使用 FragmentStatePagerAdapter
一切正常(参见 earlier question ) .
现在对于更大的屏幕,我想保留一个 ViewPager
,但我希望前两个 fragment 位于同一个第一页上。
为此,我实现了自己的 PagerAdapter,这主要是有效的,我要解决的唯一问题是当我旋转屏幕时,我收到一个错误:
12-11 16:34:13.526: ERROR/AndroidRuntime(9221): FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.matthieu/com.matthieu.TestActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f030002 (com.matthieu:id/top_fragment) for fragment TestFragment{481a3a98 #0 id=0x7f030002}
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3815)
at android.app.ActivityThread.access$2400(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2037)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f030002 (com.matthieu:id/top_fragment) for fragment TestFragment{481a3a98 #0 id=0x7f030002}
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:903)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1861)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)
at android.app.Activity.performStart(Activity.java:3781)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2636)
... 12 more
我在 GitHub 上放了一个示例代码来模拟我正在尝试做的事情(并显示此错误消息) .
我想我遇到的一个问题是由于我在实际应用程序中拥有的 fragment ,我不能真正拥有 static newInstance
构造函数,而是提前创建 fragment 并具有'setRetainInstance (真的);'设置。
我了解将包含 fragment should be part of the hierarchy 的 viewGroup
的 ID ,最终,我猜,它是......
如果有什么不同,我将使用支持库和 SherlockActionBar 来保持与旧设备的向后兼容性。
你知道怎么做吗?
EDIT:我发现如果我从 onSaveInstanceState
中的 FragmentManager
中删除 fragment ,我不会再遇到任何崩溃。所有的 fragment 都是从头开始重新创建的,这不是我想要的,但我想我可能不得不这样做并稍后以某种方式恢复这些 fragment ......
最佳答案
好吧,虽然我换了另一种做事方式,但我不喜欢留下不完整的东西……
按照 Mark 的建议采用嵌套 Fragments 的方式。评论中发布的链接转到 404,但我找到了您的 example code关于嵌套 fragment 。
我在路上学到了一些东西:
嵌套 fragment 不能有setRetainInstance(true)
,否则会得到:
java.lang.IllegalStateException: 无法保留嵌套在其他 fragment 中的 fragment
在ViewPager
的页面中创建一个FrameLayout
来保存fragment是错误的。查看 Android 代码(特别是 FragmentPagerAdapter
),我应该只使用 container.getId()
来查找添加 Fragment
的位置。看起来你不能在那个级别做任何更复杂的事情,否则它会崩溃。
据我了解,如果 fragment 包含一些需要很长时间才能加载的信息(就像我一样),则处理此问题的不同方法是:
onSaveInstanceState
(首选方式?),但如果 Fragment 是嵌套的,则不可能。框架需要时会调用(空)构造函数。setRetainInstance(true)
,在那种情况下savedInstanceBundle
总是null
,但是那个Fragment(作为Java对象)不会被销毁它仍然会通过 onAttach/onCreateView。无论如何,我在 github 上使用嵌套 fragment 推送了我的解决方案
关于android - 一页包含多个 fragment 的 ViewPager "java.lang.IllegalArgumentException: No view found for id",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13816442/
在使用客户端应用程序和OAuth2授权服务器时出现错误。我用的是Spring。我已经设置了授权服务器、资源服务器和客户端。使用cURL时,授权服务器和资源服务器工作正常。但是,当我为客户端编写设置(包
在使用客户端应用程序和OAuth2授权服务器时出现错误。我用的是Spring。我已经设置了授权服务器、资源服务器和客户端。使用cURL时,授权服务器和资源服务器工作正常。但是,当我为客户端编写设置(包
我希望你能找到我的文字,因为我真的对我的项目感到困惑,因为应用程序不能安装在模拟器中。我希望你的建议和指导。这是运行应用程序时的日志记录。RegisterViewModel.kt。密封的类资源.kt。
我正在尝试制作按钮,单击它们时会播放声音。但我有一个麻烦。我实在搞不清楚。这是我的代码: import javafx.application.Application; import javafx.ev
我正在查看一些遗留代码,发现一个部分导致我得到“比较方法违反了其一般契约!”错误。我知道这个错误是代码不具有传递性的结果,但我不完全理解如何正确修复它。 这是导致错误的代码。 private void
运行以下方法时,我不断收到 IllegalArgumentException: public int randomize(ArrayList list){ Random rdm = new R
我想给 Jenkins 添加一个新的 slave。当我遵循 Jenkins UI 时,它给了我下面的命令 java -jar agent.jar -jnlpUrl http:///computer//
我正在使用运行时反射来加载一个包含以下两个方法的类: public static void foo(int[] args) { System.out.print("foo invoked: "
我已经使用以下查询来匹配所有文档 { "query": { "custom_score": { "query": { "query_string": {
我有这个命令: list.stream() .filter(e -> ...) .sorted(comparatorShuffle()) .findAny() .orE
我收到以下运行时错误: checkParameterIsNotNull, parameter oneClickTokens at com.info.app.fragments.Fragmen
我有两个列表: (def xxa ["olp" "xyz"]) (def xxb ["ulove" "alove" "holp" "sholp"]) 还有一个函数尝试获取第一个列表的元素,这些元素是第
在我的代码中,我在向服务器执行请求的行中捕获了 IllegalArgumentException(索引 85 处查询中的非法字符)。使用 was build as patter 命令,另一个任务正确完
我试图将 String[] 放入 jsonObject 并收到以下错误 java.lang.IllegalArgumentException: Invalid type of value. Type:
我过去的一个试卷问题要求我修改一个方法,以导致发生 IllegalArgumentException。 该方法仅涉及从银行帐户余额中提取资金 这是执行此操作的方法。 公共(public)无效提款(双倍
我这里遇到了一点问题。我想弄清楚如何捕获 IllegalArgumentException。对于我的程序,如果用户输入负整数,程序应该捕获 IllegalArgumentException 并询问用户
每当插件尝试运行此延迟的任务时,我都会收到“ IllegalArgumentException:插件不能为空”错误: Bukkit.getServer().getScheduler().sched
我有这个命令: list.stream() .filter(e -> ...) .sorted(comparatorShuffle()) .findAny() .orE
我在更改应用程序中的场景时遇到问题,看起来像 Main screen > Login screen 我在主文件中将屏幕存储为 hashmap一切都很好,直到我从登录屏幕返回到主屏幕并想再次加载登录屏幕
我在这里缺少什么? 我得到异常:java.lang.IllegalArgumentException:对象不是声明类的实例 public boolean onSave(Object entity,Se
我是一名优秀的程序员,十分优秀!