Я пытаюсь удалить или заменить фрагмент из контейнера.Фрагмент создается в onCreate () действия и должен исчезнуть после нажатия кнопок.Однако я не могу удалить или заменить фрагмент.
В отчаянии я попытался заменить контейнер пустым фрагментом того же цвета фона, однако пустой фрагмент просто отображается под другим фрагментом вместоэто заменяется.У меня есть метод для очистки всех фрагментов, который работает в каждом случае, кроме dashboardInfoFragment.Я не уверен, что это потому, что я создаю его в onCreate () или что-то еще, что я не могу определить.Я получаю те же результаты, используя замену, что и для добавления с транзакцией фрагмента.Мне никогда не удавалось удалить один фрагмент из этого приложения, но clearFragments () работает для всех остальных фрагментов.
Я просмотрел бесчисленные сообщения на эту тему и перепробовал все, но не могу удалить этофрагмент по ссылке на фрагмент или по тегу или в clearFragments (), поэтому любая помощь будет принята с благодарностью.
Вот соответствующий фрагмент действия
public class DashboardActivity extends AppCompatActivity {
DashboardInfoFragment dashboardInfoFragment;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dashboard);
dashboardInfoFragment = DashboardInfoFragment.newInstance();
replaceFragment(R.id.dashboard_table_fragment_place, dashboardInfoFragment, "dashboardInfoFragment");
menuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isClassMenuOpen) {
startClassMenu();
} else {
clearAllFragments();
startClassMenu();
}
}
});
homeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clearAllFragments();
replaceFragment(R.id.dashboard_table_fragment_place, dashboardInfoFragment, "dashboardInfoFragment");
}
});
}
public void startClassMenu() {
clearAllFragments();
// This doesn't work
removeSingleFragment(R.id.dashboard_table_fragment_place, dashboardInfoFragment, "dashboardInfoFragment");
dashboardInfoFragment = DashboardInfoFragment.newInstance();
replaceFragment(R.id.dashboard_table_fragment_place, dashboardInfoFragment, "dashboardInfoFragment");
// Trying to replace with blank fragment but gets displayed below the dashboardInfoFragment
blankFragment = BlankFragment.newInstance();
replaceFragment(R.id.dashboard_table_fragment_place, blankFragment, "blankFragment");
ClassMenuFragment classMenuFragment = ClassMenuFragment.newInstance(classList);
replaceFragment(R.id.class_menu_fragment_place, classMenuFragment, "classMenuFragment");
}
// Removes all fragments except for dashboardInfoFragment
public void clearAllFragments() {
try {
FragmentManager manager = getSupportFragmentManager();
manager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
isClassMenuOpen = false;
isSettingsMenuOpen = false;
isModuleOptionsMenuOpen = false;
} catch (Exception e) {
e.printStackTrace();
}
}
public void replaceFragment(int id, Fragment fragment, String tag) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(id, fragment);
transaction.addToBackStack(tag);
transaction.commit();
}
// Some of my attempts at removing the fragment
public void removeSingleFragment(int container, Fragment fragment, String tag) {
// if (getSupportFragmentManager().findFragmentById(container) != null) {
// getSupportFragmentManager()
// .beginTransaction().
// remove(getSupportFragmentManager().findFragmentById(container)).commit();
// }
//
// getSupportFragmentManager()
// .beginTransaction()
// .replace(container, fragment)
// .commit();
//FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
// if (fragment != null) {
// transaction.remove(fragment);
// transaction.commit().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
// fragment = null;
//
// }
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
if(fragment!=null&&fragment.isAdded()) {
transaction = fragmentManager.beginTransaction();
transaction.remove(fragment);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
transaction.commitAllowingStateLoss();
}
transaction = fragmentManager.beginTransaction();
transaction.replace(container, fragment, tag).commit();
}
}
});
}