В Android добавлен фрагмент, который невозможно отобразить после нажатия на спину - PullRequest
0 голосов
/ 28 мая 2018

У меня есть 3 фрагмента фрагмента A, фрагмента B, фрагмента C, которые по умолчанию добавляются в действие при создании, чтобы сохранить его экземпляр после этого, у меня есть еще один фрагмент фрагмента X, который нужно добавить в контейнер фрагментов с помощью backStack при нажатии кнопки, фрагментXотображается при добавлении, но когда мне нужно показать его снова, он не работает.

public class MainActivity extends ActivityBaseClass {

private Fragment fragmentA;
private Fragment fragmentB;
private Fragment fragmentC;
private Fragment fragmentX;

@BindView(R.id.btn_show_fragmentx)
Button mBtnShowFragmentX;
@BindView(R.id.tab_layout)
TabLayout mTab;

private FragmentTransaction transaction;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);

    fragmentA = FragmentA.newInstance();
    fragmentB = FragmentB.newInstance();
    fragmentC = FragmentC.newInstance();

    transaction = getSupportFragmentManager().beginTransaction();
    transaction.add(R.id.fragment_container, fragmentA, "A");
    transaction.add(R.id.fragment_container, fragmentB, "B");
    transaction.add(R.id.fragment_container, fragmentC, "C");
    transaction.commit();


    mTab.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            transaction = getSupportFragmentManager().beginTransaction();
            switch (tab.getPosition()) {
                case 0:
                    transaction.show(fragmentA);
                    transaction.hide(fragmentB);
                    transaction.hide(fragmentC);
                    break;
                case 1:
                    transaction.show(fragmentB);
                    transaction.hide(fragmentA);
                    transaction.hide(fragmentC);
                    break;
                case 2:
                    transaction.show(fragmentC);
                    transaction.hide(fragmentA);
                    transaction.hide(fragmentB);
                    break;

            }
            transaction.commit();
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });
}

@OnClick(R.id.btn_show_fragmentx)
public void showFragmentX() {
    if (fragmentX == null) {
        fragmentX = FragmentX.newInstance();
        transaction = getSupportFragmentManager().beginTransaction();
        transaction.add(R.id.fragment_container, fragmentX, "X");
        transaction.addToBackStack("X");
        transaction.commit();
    } else {
        transaction = getSupportFragmentManager().beginTransaction();
        transaction.show(fragmentX);
        transaction.addToBackStack("X");
        transaction.commit();
    }
}

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
        Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
        transaction = getSupportFragmentManager().beginTransaction();
        transaction.hide(fragment);
        transaction.commit();

         getSupportFragmentManager().popBackStack();
    } else {
        super.onBackPressed();
    }
}

}

1 Ответ

0 голосов
/ 28 мая 2018

Ваш фрагментX уничтожается при вызове onBackPressed.Вам нужно проверить текущий фрагмент backstack, если это экземпляр FragmentX, затем спрятать его (и не вставлять backstack), иначе сделайте свой код.

...