下面列出了android.support.v4.app.Fragment#SavedState ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private void resetSearchResults() {
Log.v(LOG_TAG, "-> resetSearchResults");
ArrayList<Fragment> fragments = mFolioPageFragmentAdapter.getFragments();
for (int i = 0; i < fragments.size(); i++) {
FolioPageFragment folioPageFragment = (FolioPageFragment) fragments.get(i);
if (folioPageFragment != null) {
folioPageFragment.resetSearchResults();
}
}
ArrayList<Fragment.SavedState> savedStateList =
mFolioPageFragmentAdapter.getSavedStateList();
if (savedStateList != null) {
for (int i = 0; i < savedStateList.size(); i++) {
Fragment.SavedState savedState = savedStateList.get(i);
Bundle bundle = FolioPageFragmentAdapter.getBundleFromSavedState(savedState);
if (bundle != null)
bundle.putParcelable(FolioPageFragment.BUNDLE_SEARCH_ITEM, null);
}
}
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// If we already have this item instantiated, there is nothing
// to do. This can happen when we are restoring the entire pager
// from its saved state, where the fragment manager has already
// taken care of restoring the fragments we previously had instantiated.
if (mFragments.size() > position) {
Fragment f = mFragments.get(position);
if (f != null) {
return f;
}
}
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
Fragment fragment = getItem(position);
if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
if (mSavedState.size() > position) {
Fragment.SavedState fss = mSavedState.get(position);
if (fss != null) {
fragment.setInitialSavedState(fss);
}
}
while (mFragments.size() <= position) {
mFragments.add(null);
}
fragment.setMenuVisibility(false);
fragment.setUserVisibleHint(false);
mFragments.set(position, fragment);
mCurTransaction.add(container.getId(), fragment);
return fragment;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// If we already have this item instantiated, there is nothing
// to do. This can happen when we are restoring the entire pager
// from its saved state, where the fragment manager has already
// taken care of restoring the fragments we previously had instantiated.
if (mFragments.size() > position) {
Fragment f = mFragments.get(position);
if (f != null) {
return f;
}
}
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
Fragment fragment = getItem(position);
if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
if (mSavedState.size() > position) {
Fragment.SavedState fss = mSavedState.get(position);
if (fss != null) {
fragment.setInitialSavedState(fss);
}
}
while (mFragments.size() <= position) {
mFragments.add(null);
}
fragment.setMenuVisibility(false);
fragment.setUserVisibleHint(false);
mFragments.set(position, fragment);
mCurTransaction.add(container.getId(), fragment);
return fragment;
}
public ArrayList<Fragment.SavedState> getSavedStateList() {
if (savedStateList == null) {
try {
Field field = FragmentStatePagerAdapter.class.getDeclaredField("mSavedState");
field.setAccessible(true);
savedStateList = (ArrayList<Fragment.SavedState>) field.get(this);
} catch (Exception e) {
Log.e(LOG_TAG, "-> ", e);
}
}
return savedStateList;
}
@Override
@NonNull
public Object instantiateItem(ViewGroup container, int position) {
long tag = getItemId(position);
Fragment fragment = mFragments.get(tag);
// If we already have this item instantiated, there is nothing
// to do. This can happen when we are restoring the entire pager
// from its saved state, where the fragment manager has already
// taken care of restoring the fragments we previously had instantiated.
if (fragment != null) {
return fragment;
}
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
fragment = getItem(position);
// restore state
final Fragment.SavedState savedState = mSavedStates.get(tag);
if (savedState != null) {
fragment.setInitialSavedState(savedState);
}
fragment.setMenuVisibility(false);
fragment.setUserVisibleHint(false);
mFragments.put(tag, fragment);
mCurTransaction.add(container.getId(), fragment, "f" + tag);
return fragment;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// If we already have this item instantiated, there is nothing
// to do. This can happen when we are restoring the entire pager
// from its saved state, where the fragment manager has already
// taken care of restoring the fragments we previously had instantiated.
if (mFragments.size() > position) {
Fragment f = mFragments.get(position);
if (f != null) {
return f;
}
}
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
Fragment fragment = getItem(position);
if (DEBUG) {
Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
}
if (mSavedState.size() > position) {
Fragment.SavedState fss = mSavedState.get(position);
if (fss != null) {
fragment.setInitialSavedState(fss);
}
}
while (mFragments.size() <= position) {
mFragments.add(null);
}
fragment.setMenuVisibility(false);
fragment.setUserVisibleHint(false);
mFragments.set(position, fragment);
mCurTransaction.add(container.getId(), fragment, getTag(position));
return fragment;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// If we already have this item instantiated, there is nothing
// to do. This can happen when we are restoring the entire pager
// from its saved state, where the fragment manager has already
// taken care of restoring the fragments we previously had instantiated.
if (mFragments.size() > position) {
Fragment f = mFragments.get(position);
if (f != null) {
return f;
}
}
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
Fragment fragment = getItem(position);
if (DEBUG)
Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
if (mSavedState.size() > position) {
Fragment.SavedState fss = mSavedState.get(position);
if (fss != null) {
fragment.setInitialSavedState(fss);
}
}
while (mFragments.size() <= position) {
mFragments.add(null);
}
fragment.setMenuVisibility(false);
mFragments.set(position, fragment);
mCurTransaction.add(container.getId(), fragment, getTag(position));
return fragment;
}
@SuppressLint("LongLogTag")
@Override
public Object instantiateItem(ViewGroup container, int position) {
// If we already have this item instantiated, there is nothing
// to do. This can happen when we are restoring the entire pager
// from its saved state, where the fragment manager has already
// taken care of restoring the fragments we previously had instantiated.
if (mFragments.size() > position) {
Fragment f = mFragments.get(position);
if (f != null) {
return f;
}
}
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
Fragment fragment = getItem(position);
if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
if (mSavedState.size() > position) {
Fragment.SavedState fss = mSavedState.get(position);
if (fss != null) {
fragment.setInitialSavedState(fss);
}
}
while (mFragments.size() <= position) {
mFragments.add(null);
}
fragment.setMenuVisibility(false);
fragment.setUserVisibleHint(false);
mFragments.set(position, fragment);
mCurTransaction.add(container.getId(), fragment);
return fragment;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// If we already have this item instantiated, there is nothing
// to do. This can happen when we are restoring the entire pager
// from its saved state, where the fragment manager has already
// taken care of restoring the fragments we previously had instantiated.
if (mFragments.size() > position) {
Fragment f = mFragments.get(position);
if (f != null) {
return f;
}
}
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
Fragment fragment = getItem(position);
if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
if (mSavedState.size() > position) {
Fragment.SavedState fss = mSavedState.get(position);
if (fss != null) {
fragment.setInitialSavedState(fss);
}
}
while (mFragments.size() <= position) {
mFragments.add(null);
}
// fragment.setMenuVisibility(false);
fragment.setUserVisibleHint(false);
mFragments.set(position, fragment);
mCurTransaction.add(container.getId(), fragment);
return fragment;
}
private void saveFragmentState(int index, Fragment fragment) {
Fragment.SavedState savedState = getSupportFragmentManager().saveFragmentInstanceState(fragment);
savedStateSparseArray.put(index, savedState);
}
public void setFragmentSavedState(String key, Fragment.SavedState state){
savedStateMap.put(key, state);
}
@Override
public void onCreate() {
savedStateMap = new HashMap<String, Fragment.SavedState>();
super.onCreate();
}
public void setInitialSavedState(@Nullable Fragment.SavedState state) {
verifyMethodCalledFromDelegate("setInitialSavedState(Fragment.SavedState)");
((CallVoid1<Fragment.SavedState>) mSuperListeners.pop()).call(state);
}
void setInitialSavedState(final CallVoid1<Fragment.SavedState> superCall, @Nullable Fragment.SavedState state) {
synchronized (mSuperListeners) {
mSuperListeners.push(superCall);
setInitialSavedState(state);
}
}
public void setInitialSavedState(@Nullable Fragment.SavedState state) {
mFragmentDelegate.setInitialSavedState(state);
}
@Override
public void setInitialSavedState(@Nullable Fragment.SavedState state) {
delegate.setInitialSavedState(state);
}
@Override
public void super_setInitialSavedState(@Nullable Fragment.SavedState state) {
super.setInitialSavedState(state);
}
@Override
public void setInitialSavedState(@Nullable Fragment.SavedState state) {
delegate.setInitialSavedState(state);
}
/**
* Return the Fragment associated with a specified position.
*/
public abstract Fragment getItem(int position, Fragment.SavedState savedState);
void setInitialSavedState(@Nullable Fragment.SavedState state);