переключение фрагментов - возврат из стека невозможен - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь реализовать навигацию между двумя фрагментами.Одним из них является представление по умолчанию для моего приложения, которое содержит только RecyclerView с собственными элементами, а другое - ScrollView с TableLayout в качестве дочернего элемента.Приложение правильно переключается с моего 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$1.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 to RecyclerView, а не при запуске приложения, когда фрагмент по умолчанию содержит RecyclerView.Вот мои .java и .xml файлы: 5 файлов в Gist

1 Ответ

0 голосов
/ 09 июня 2018

Фрагмент 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;
            }
        }
    });
...