Make accessing fragments inside a view pager more robust
This commit is contained in:
parent
1cf701a422
commit
ae9c22b20e
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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<Integer, Fragment> 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;
|
||||
|
|
Loading…
Reference in New Issue