问题描述
我想根据OnClickListener隐藏/显示片段。隐藏片段是可行的,但是当我想再次显示它时,它不会显示。我不想使用replace(),因为该片段需要一段时间才能加载,因为它是从服务器下载图像的。
private void replaceFragment (Fragment fragment){
String backStateName = fragment.getClass().getName();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if (addedFragments.size() != 0) {
for (Fragment frag :
addedFragments) {
if (frag !=null) {
String fragTag = frag.getClass().getName();
if (fragmentManager.findFragmentByTag(fragTag).isVisible() && !fragTag.equals(backStateName)) {
fragmentTransaction.hide(fragmentManager.findFragmentByTag(frag.getClass().getName()));
Log.d("frag","hide" + fragTag);
}
}
}
}
if(fragmentManager.findFragmentByTag(backStateName) != null && fragmentManager.findFragmentByTag(backStateName).isAdded()) {
//if the fragment exists,show it.
fragmentTransaction.setCustomAnimations(android.R.animator.fade_in,android.R.animator.fade_out).show(fragmentManager.findFragmentByTag(backStateName)).commit();
Log.d("frag","show frag"+fragmentManager.findFragmentByTag(backStateName).getClass().getName());
}
}
以及侦听器的代码:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
if (menuItem.getItemId() == R.id.option1) {
if (fragmentManager.findFragmentByTag(WantedAnimals.class.getName()) == null){
WantedAnimals wantedAnimals = new WantedAnimals();
fragmentManager.beginTransaction().add(R.id.container_fragment,wantedAnimals,wantedAnimals.getClass().getName()).commit();
addedFragments.add(wantedAnimals);
} else {
replaceFragment(fragmentManager.findFragmentByTag(WantedAnimals.class.getName()));
}
}
if (menuItem.getItemId() == R.id.option2) {
if (fragmentManager.findFragmentByTag(FoundAnimals.class.getName()) == null){
FoundAnimals foundAnimals = new FoundAnimals();
fragmentManager.beginTransaction().add(R.id.container_fragment,foundAnimals,foundAnimals.getClass().getName()).commit();
addedFragments.add(foundAnimals);
} else {
replaceFragment(fragmentManager.findFragmentByTag(FoundAnimals.class.getName()));
}
}
if (menuItem.getItemId() == R.id.option3) {
if (fragmentManager.findFragmentByTag(AnimalsToGiveAway.class.getName()) == null){
AnimalsToGiveAway animalsToGiveAway = new AnimalsToGiveAway();
fragmentManager.beginTransaction().add(R.id.container_fragment,animalsToGiveAway,animalsToGiveAway.getClass().getName()).commit();
addedFragments.add(animalsToGiveAway);
} else {
replaceFragment(fragmentManager.findFragmentByTag(AnimalsToGiveAway.class.getName()));
}
}
return true;
}
解决方法
我很笨,我在片段的on create方法中插入了一个旧代码,如果容器不是空的话,它们会删除所有视图