diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/FragmentStateManager.java b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/FragmentStateManager.java index 9c610155b..353b9d27e 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/FragmentStateManager.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/FragmentStateManager.java @@ -23,16 +23,14 @@ public abstract class FragmentStateManager { public abstract Fragment getItem(int position); public boolean change(int position) { - FragmentTransaction ft = fm.beginTransaction(); - Fragment fragment = fm.findFragmentByTag(getTag(position)); - if (fragment == null) ft.add(container.getId(), fragment = getItem(position), getTag(position)); - else ft.show(fragment); + String tag = getTag(position); + Fragment fragment = fm.findFragmentByTag(tag); + fragment = (fragment == null) ? getItem(position) : fragment; + FragmentTransaction ft = fm.beginTransaction().setTransition(TRANSIT_FRAGMENT_OPEN); + if (fm.findFragmentByTag(tag) == null) ft.add(container.getId(), fragment, tag); Fragment current = fm.getPrimaryNavigationFragment(); - if (current != null) ft.hide(current); - ft.setTransition(TRANSIT_FRAGMENT_OPEN); - ft.setPrimaryNavigationFragment(fragment); - ft.setReorderingAllowed(true); - ft.commitNowAllowingStateLoss(); + if (current != null && current != fragment) ft.hide(current); + ft.show(fragment).setPrimaryNavigationFragment(fragment).setReorderingAllowed(true).commitNowAllowingStateLoss(); return true; } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SearchFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SearchFragment.java index c5eec8cff..df9cb6aa7 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SearchFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SearchFragment.java @@ -17,7 +17,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.core.view.MenuProvider; -import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.Lifecycle; @@ -44,6 +43,7 @@ import com.google.common.net.HttpHeaders; import java.io.IOException; import java.net.URLEncoder; import java.util.List; +import java.util.Optional; import okhttp3.Call; import okhttp3.Headers; @@ -139,15 +139,13 @@ public class SearchFragment extends BaseFragment implements MenuProvider, WordAd private void collect(String keyword) { FragmentManager fm = requireActivity().getSupportFragmentManager(); - Fragment collect = fm.findFragmentByTag(CollectFragment.class.getSimpleName()); - if (collect != null) return; + String collectTag = CollectFragment.class.getSimpleName(); + if (fm.findFragmentByTag(collectTag) != null) return; + String searchTag = SearchFragment.class.getSimpleName(); FragmentTransaction ft = fm.beginTransaction().setTransition(TRANSIT_FRAGMENT_OPEN); - ft.add(R.id.container, CollectFragment.newInstance(keyword), CollectFragment.class.getSimpleName()); - Fragment search = fm.findFragmentByTag(SearchFragment.class.getSimpleName()); - if (search != null) ft.hide(search); - ft.setReorderingAllowed(true); - ft.addToBackStack(null); - ft.commit(); + ft.add(R.id.container, CollectFragment.newInstance(keyword), collectTag); + Optional.ofNullable(fm.findFragmentByTag(searchTag)).ifPresent(ft::hide); + ft.setReorderingAllowed(true).addToBackStack(null).commit(); } private void getHot() {