diff --git a/app/src/main/java/org/xbmc/kore/ui/FileListFragment.java b/app/src/main/java/org/xbmc/kore/ui/FileListFragment.java index f37d4d6..69c8b70 100644 --- a/app/src/main/java/org/xbmc/kore/ui/FileListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/FileListFragment.java @@ -77,15 +77,11 @@ public class FileListFragment extends Fragment } } - MediaFileListFragment findFragmentByPosition(int position) { - String tag = "android:switcher:" + viewPager.getId() + ":" + position; - return (MediaFileListFragment) getChildFragmentManager().findFragmentByTag(tag); - } - @Override public boolean onBackPressed() { // Tell current fragment to move up one directory, if possible - MediaFileListFragment curPage = findFragmentByPosition(viewPager.getCurrentItem() + 1); + MediaFileListFragment curPage = (MediaFileListFragment)((TabsAdapter)viewPager.getAdapter()) + .getStoredFragment(viewPager.getCurrentItem()); if ((curPage != null) && !curPage.atRootDirectory()) { curPage.onBackPressed(); return true; diff --git a/app/src/main/java/org/xbmc/kore/ui/PVRListFragment.java b/app/src/main/java/org/xbmc/kore/ui/PVRListFragment.java index a3a71ed..597b59b 100644 --- a/app/src/main/java/org/xbmc/kore/ui/PVRListFragment.java +++ b/app/src/main/java/org/xbmc/kore/ui/PVRListFragment.java @@ -78,15 +78,12 @@ public class PVRListFragment extends Fragment setHasOptionsMenu(false); } - Fragment findFragmentByPosition(int position) { - String tag = "android:switcher:" + viewPager.getId() + ":" + position; - return getChildFragmentManager().findFragmentByTag(tag); - } - @Override public boolean onBackPressed() { // Tell current fragment to move up one directory, if possible - Fragment visibleFragment = findFragmentByPosition(viewPager.getCurrentItem() + 1); + Fragment visibleFragment = ((TabsAdapter)viewPager.getAdapter()) + .getStoredFragment(viewPager.getCurrentItem()); + if (visibleFragment instanceof OnBackPressedListener) { return ((OnBackPressedListener) visibleFragment).onBackPressed(); } diff --git a/app/src/main/java/org/xbmc/kore/utils/TabsAdapter.java b/app/src/main/java/org/xbmc/kore/utils/TabsAdapter.java index cba606e..418b7a7 100644 --- a/app/src/main/java/org/xbmc/kore/utils/TabsAdapter.java +++ b/app/src/main/java/org/xbmc/kore/utils/TabsAdapter.java @@ -20,8 +20,10 @@ import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; +import android.view.ViewGroup; import java.util.ArrayList; +import java.util.HashMap; /** * This is a helper class that implements the management of tabs and all @@ -62,12 +64,29 @@ public class TabsAdapter extends FragmentPagerAdapter { return tabInfos.size(); } + /** + * Store the created fragments, so that it is possible to get them by position later + */ + private HashMap createdFragments = new HashMap<>(5); + @Override public Fragment getItem(int position) { TabInfo info = tabInfos.get(position); - return Fragment.instantiate(context, info.fragmentClass.getName(), info.args); + Fragment fragment = Fragment.instantiate(context, info.fragmentClass.getName(), info.args); + + createdFragments.put(position, fragment); + return fragment; } + @Override + public void destroyItem (ViewGroup container, int position, Object object) { + super.destroyItem(container, position, object); + createdFragments.remove(position); + } + + public Fragment getStoredFragment(int position) { + return createdFragments.get(position); + } @Override public long getItemId(int position) { return tabInfos.get(position).fragmentId;