片段切换 - 不能 return 来自 backstack
fragment switching - can't return from backstack
我正在尝试实现两个片段之间的导航。一个是我的应用程序的默认视图,它只包含带有自己项目的 RecyclerView,另一个是带有 TableLayout 作为子项的 ScrollView。应用程序正确地从我的 ViewAdverts
片段切换到 AddAdvert
,但是当我想返回时出现异常并且应用程序崩溃:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: pl.polsl.elektr.quicktrade011, PID: 14676
java.lang.IllegalStateException: ScrollView can host only one direct child
at android.widget.ScrollView.addView(ScrollView.java:248)
at android.support.design.widget.BaseTransientBottomBar.showView(BaseTransientBottomBar.java:444)
at android.support.design.widget.BaseTransientBottomBar.handleMessage(BaseTransientBottomBar.java:185)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
我不知道为什么只有在从 ScrollView 返回到 RecyclerView 时才会出现该错误,而不是在默认片段包含 RecyclerView 时在应用程序启动时出现。
这是我的 .java
和 .xml
文件:
5 files at Gist
片段A
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction =
fragmentManager.beginTransaction();
fragment = new DashboardFragment();
fragmentTransaction.replace(R.id.container, fragment).addToBackStack(null).commit();
片段 B
rootview.setFocusableInTouchMode(true);
rootview.requestFocus();
rootview.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
// DO WHAT YOU WANT ON BACK PRESSED
getFragmentManager().popBackStack();
return true;
} else {
return false;
}
}
});
我正在尝试实现两个片段之间的导航。一个是我的应用程序的默认视图,它只包含带有自己项目的 RecyclerView,另一个是带有 TableLayout 作为子项的 ScrollView。应用程序正确地从我的 ViewAdverts
片段切换到 AddAdvert
,但是当我想返回时出现异常并且应用程序崩溃:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: pl.polsl.elektr.quicktrade011, PID: 14676
java.lang.IllegalStateException: ScrollView can host only one direct child
at android.widget.ScrollView.addView(ScrollView.java:248)
at android.support.design.widget.BaseTransientBottomBar.showView(BaseTransientBottomBar.java:444)
at android.support.design.widget.BaseTransientBottomBar.handleMessage(BaseTransientBottomBar.java:185)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
我不知道为什么只有在从 ScrollView 返回到 RecyclerView 时才会出现该错误,而不是在默认片段包含 RecyclerView 时在应用程序启动时出现。
这是我的 .java
和 .xml
文件:
5 files at Gist
片段A
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction =
fragmentManager.beginTransaction();
fragment = new DashboardFragment();
fragmentTransaction.replace(R.id.container, fragment).addToBackStack(null).commit();
片段 B
rootview.setFocusableInTouchMode(true);
rootview.requestFocus();
rootview.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
// DO WHAT YOU WANT ON BACK PRESSED
getFragmentManager().popBackStack();
return true;
} else {
return false;
}
}
});