- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 2 个 fragment 在 Activity 中。第一个 fragment A 有一个 recyclerview,其中一行包含 viewpager。此 ViewPager 具有使用 FragmentStatePagerAdapter 创建的多个 fragment (每个页面都是一个 fragment )。现在单击一个操作项,我将用户导航到 fragment B。在这里,我使用 FragmentTransaction 的 replace() 方法将 fragment A 替换为 B。现在按下 fragment B 上的后退按钮,应用程序崩溃并出现以下异常:
02-06 18:21:49.038: W/System.err(6916): java.lang.IllegalArgumentException: No view found for id 0x7f110209 (com.example:id/vPager) for fragment VFragment{da512cf #0 id=0x7f110209}
02-06 18:21:49.038: W/System.err(6916): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:939)
02-06 18:21:49.038: W/System.err(6916): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
02-06 18:21:49.038: W/System.err(6916): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108)
02-06 18:21:49.038: W/System.err(6916): at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1917)
02-06 18:21:49.038: W/System.err(6916): at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1800)
02-06 18:21:49.038: W/System.err(6916): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:967)
02-06 18:21:49.038: W/System.err(6916): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
02-06 18:21:49.038: W/System.err(6916): at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:957)
02-06 18:21:49.039: W/System.err(6916): at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1541)
02-06 18:21:49.039: W/System.err(6916): at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:502)
02-06 18:21:49.039: W/System.err(6916): at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:176)
02-06 18:21:49.039: W/System.err(6916): at android.support.v7.app.ActionBarActivity.onBackPressed(ActionBarActivity.java:298)
02-06 18:21:49.039: W/System.err(6916): at com.example.MainActivity.onBackPressed(MainActivity.java:2049)
02-06 18:21:49.039: W/System.err(6916): at android.app.Activity.onKeyUp(Activity.java:2453)
02-06 18:21:49.039: W/System.err(6916): at android.view.KeyEvent.dispatch(KeyEvent.java:2633)
02-06 18:21:49.039: W/System.err(6916): at android.app.Activity.dispatchKeyEvent(Activity.java:2704)
02-06 18:21:49.039: W/System.err(6916): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2221)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3918)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3880)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3578)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3635)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3476)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3449)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3468)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3611)
02-06 18:21:49.039: W/System.err(6916): at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3772)
02-06 18:21:49.039: W/System.err(6916): at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2208)
02-06 18:21:49.039: W/System.err(6916): at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1849)
02-06 18:21:49.039: W/System.err(6916): at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1840)
02-06 18:21:49.039: W/System.err(6916): at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2185)
02-06 18:21:49.039: W/System.err(6916): at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
02-06 18:21:49.039: W/System.err(6916): at android.os.MessageQueue.nativePollOnce(Native Method)
02-06 18:21:49.039: W/System.err(6916): at android.os.MessageQueue.next(MessageQueue.java:143)
02-06 18:21:49.039: W/System.err(6916): at android.os.Looper.loop(Looper.java:122)
02-06 18:21:49.040: W/System.err(6916): at android.app.ActivityThread.main(ActivityThread.java:5221)
02-06 18:21:49.040: W/System.err(6916): at java.lang.reflect.Method.invoke(Native Method)
02-06 18:21:49.040: W/System.err(6916): at java.lang.reflect.Method.invoke(Method.java:372)
02-06 18:21:49.040: W/System.err(6916): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
02-06 18:21:49.040: W/System.err(6916): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
请注意,如果我使用 FragmentTransaction 的 add() 方法添加 fragment B,则后退键不会使应用程序崩溃。从上面的崩溃日志看来,甚至在 recyclerview 更新其 View 之前,viewpager 子 fragment 正在尝试查找 viewpager。如何防止这种情况或延迟 fragment 状态保留过程,直到 recyclerview 再次准备就绪?
最佳答案
我遇到了类似的问题(我没有使用 replace 但我使用了 add),我找到了解决方案。您需要在父 fragment ( fragment A)的 onCreateView() 或 onActivityCreated() 中分离嵌套 fragment 。然后,在对该 fragment 的绑定(bind)调用中,您可以重新附加。下面是一些示例代码:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
FragmentManager fragmentManager = getChildFragmentManager();
Fragment fragment = fragmentManager.findFragmentById(R.id.nested_fragment);
if (fragment != null) {
fragmentManager.beginTransaction().detach(fragment).commit();
fragmentManager.executePendingTransactions();
}
}
请注意,调用 executePendingTransactions() 很重要。如果我正确理解了问题,那是因为 onActivityCreated() 正在作为 FragmentTransaction 的一部分进行处理。如果您不调用 executePendingTransactions,它将在处理分离调用之前继续处理嵌套 fragment 。
然后在适配器的绑定(bind)调用中,执行如下操作:
public void bindNestedFragment(View view) {
Fragment fragment = mFragmentManager.findFragmentById(R.id.nested_fragment);
if (fragment == null) {
// Create/add fragment here
} else {
mFragmentManager.beginTransaction.attach(fragment).commit();
}
}
您必须通过某种方式让您的适配器访问 fragment 管理器(我只是在构造函数中传递它)。希望这对您有所帮助!
关于android - 在后按时,返回到具有 Fragments 的 RecyclerView 会导致 IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28366612/
在使用客户端应用程序和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
我是一名优秀的程序员,十分优秀!