项目:letv
文件:FragmentStatePagerAdapter.java
public Object instantiateItem(ViewGroup container,int position) {
if (this.mFragments.size() > position) {
Fragment f = (Fragment) this.mFragments.get(position);
if (f != null) {
return f;
}
}
if (this.mCurTransaction == null) {
this.mCurTransaction = this.mFragmentManager.beginTransaction();
}
Fragment fragment = getItem(position);
if (this.mSavedState.size() > position) {
SavedState fss = (SavedState) this.mSavedState.get(position);
if (fss != null) {
fragment.setinitialSavedState(fss);
}
}
while (this.mFragments.size() <= position) {
this.mFragments.add(null);
}
fragment.setMenuVisibility(false);
fragment.setUserVisibleHint(false);
this.mFragments.set(position,fragment);
this.mCurTransaction.add(container.getId(),fragment);
return fragment;
}
public Object instantiateItem(ViewGroup container,fragment);
return fragment;
}
项目:android-multibackstack
文件:BackStackEntry.java
private BackStackEntry(Parcel in) {
final ClassLoader loader = getClass().getClassLoader();
fname = in.readString();
args = in.readBundle(loader);
switch (in.readInt()) {
case NO_STATE:
state = null;
break;
case SAVED_STATE:
state = SavedState.CREATOR.createFromParcel(in);
break;
case PARCELABLE_STATE:
state = in.readParcelable(loader);
break;
default:
throw new IllegalStateException();
}
}
项目:letv
文件:FragmentStatePagerAdapter.java
public void restoreState(Parcelable state,ClassLoader loader) {
if (state != null) {
Bundle bundle = (Bundle) state;
bundle.setClassLoader(loader);
Parcelable[] fss = bundle.getParcelableArray("states");
this.mSavedState.clear();
this.mFragments.clear();
if (fss != null) {
for (Parcelable parcelable : fss) {
this.mSavedState.add((SavedState) parcelable);
}
}
for (String key : bundle.keySet()) {
if (key.startsWith("f")) {
int index = Integer.parseInt(key.substring(1));
Fragment f = this.mFragmentManager.getFragment(bundle,key);
if (f != null) {
while (this.mFragments.size() <= index) {
this.mFragments.add(null);
}
f.setMenuVisibility(false);
this.mFragments.set(index,f);
} else {
Log.w(TAG,"Bad fragment at key " + key);
}
}
}
}
}
项目:letv
文件:FragmentManagerImpl.java
public SavedState saveFragmentInstanceState(Fragment fragment) {
if (fragment.mIndex < 0) {
throwException(new IllegalStateException("Fragment " + fragment + " is not currently in the FragmentManager"));
}
if (fragment.mState <= 0) {
return null;
}
Bundle result = saveFragmentBasicState(fragment);
if (result != null) {
return new SavedState(result);
}
return null;
}
public void restoreState(Parcelable state,"Bad fragment at key " + key);
}
}
}
}
}
public SavedState saveFragmentInstanceState(Fragment fragment) {
if (fragment.mIndex < 0) {
throwException(new IllegalStateException("Fragment " + fragment + " is not currently in the FragmentManager"));
}
if (fragment.mState <= 0) {
return null;
}
Bundle result = saveFragmentBasicState(fragment);
if (result != null) {
return new SavedState(result);
}
return null;
}
项目:Ymir
文件:AbstractFragmentPagerAdapter.java
@SuppressWarnings("unchecked")
public AbstractFragmentPagerAdapter(FragmentManager fragmentManager,int length) {
this.fragmentManager = fragmentManager;
//É obrigado a saber o tamanho desta forma pq se chamar o getCount() vai dar pau pq a classe filha ainda não atribui nada... Pena que não dá pra fazer nada antes de chamar o super().
this.fragments = (T[]) new Fragment[length];
this.savedStates = new SavedState[length];
}
项目:Ymir
文件:AbstractFragmentPagerAdapter.java
@Override
public Object instantiateItem(ViewGroup container,int position) {
//Se já está armazenado em memporia,só recupera.
T fragment = fragments[position];
if (fragment != null) {
return fragment;
}
int containerId = container.getId();
if (containerId == View.NO_ID) {
throw new IllegalArgumentException("The ViewPager has no id");
}
//Cria o fragmento e restaura o estado anterior,se existir. Apenas fragmentos destruídos terão o estado armazenado.
String fragmentTag = createFragmentTag(position);
fragment = createFragment(position);
if (listener != null) {
listener.onFragmentCreated(fragment,position);
}
SavedState savedState = savedStates[position];
if (savedState != null) {
fragment.setinitialSavedState(savedState);
savedStates[position] = null;
}
//Adiciona o fragmento na tela,salva-o em memória e faz sua inicialização.
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(containerId,fragment,fragmentTag);
transaction.commit();
fragments[position] = fragment;
internalInitializefragment(fragment,position);
return fragment;
}
项目:Ymir
文件:AbstractFragmentPagerAdapter.java
@Override
@SuppressWarnings("unchecked")
public void restoreState(Parcelable state,ClassLoader loader) {
Bundle bundle = (Bundle) state;
bundle.setClassLoader(loader);
//Restaura os fragmentos mantidos automaticamente pelo Android.
BitSet fragmentPositions = (BitSet) bundle.getSerializable(SAVED_FRAGMENTS_POSITIONS);
int nextSetBit = 0;
while ((nextSetBit = fragmentPositions.nextSetBit(nextSetBit)) != -1) {
int fragmentPosition = nextSetBit++;
String fragmentTag = createFragmentTag(fragmentPosition);
T fragment = (T) fragmentManager.findFragmentByTag(fragmentTag);
//O fragmento deve existir,mas evita que algum problema na sua restauração automática pare a aplicação.
if (fragment != null) {
fragments[fragmentPosition] = fragment;
internalInitializefragment(fragment,fragmentPosition);
}
}
//Tem que fazer desta forma porque quando a Activity é destruída o array de saved states é recuperado
//como Parcelable[],ou seja,o cast pra SavedState[] não funciona.
Parcelable[] parcelables = bundle.getParcelableArray(SAVED_STATES);
if (BuildConfig.DEBUG && parcelables.length != savedStates.length) {
throw new AssertionError();
}
for (int i = 0; i < parcelables.length; i++) {
savedStates[i] = (SavedState) parcelables[i];
}
}
项目:Ymir
文件:PerspectiveActivity.java
@Override
public PerspectiveInstance createFromParcel(Parcel source) {
PerspectiveInstance instance = new PerspectiveInstance(source.readInt(),source.readInt(),AndroidBugsUtils.applyWorkaroundForIntentDefaultClassloaderBug(source));
PerspectiveResultRequest resultRequest = AndroidBugsUtils.applyWorkaroundForParcelableDefaultClassloaderBug(source);
instance.setResultRequest(resultRequest);
SavedState savedState = AndroidBugsUtils.applyWorkaroundForParcelableDefaultClassloaderBug(source);
instance.setSavedState(savedState);
instance.setHasUnfinishedWork(AndroidBugsUtils.applyWorkaroundForBug5973_read(source));
return instance;
}
项目:android-multibackstack
文件:BackStackEntry.java
@NonNull
public static BackStackEntry create(@NonNull FragmentManager fm,@NonNull Fragment f) {
String fname = f.getClass().getName();
SavedState state = fm.saveFragmentInstanceState(f);
Bundle args = f.getArguments();
return new BackStackEntry(fname,state,args);
}
项目:android-multibackstack
文件:BackStackEntry.java
@Override
public void writetoParcel(Parcel out,int flags) {
out.writeString(fname);
out.writeBundle(args);
if (state == null) {
out.writeInt(NO_STATE);
} else if (state.getClass() == SavedState.class) {
out.writeInt(SAVED_STATE);
state.writetoParcel(out,flags);
} else {
out.writeInt(PARCELABLE_STATE);
out.writeParcelable(state,flags);
}
}
项目:Ymir
文件:AndroidBugsUtils.java
@Override
public SavedState saveFragmentInstanceState(Fragment arg0) {
return owner.getChildFragmentManager().saveFragmentInstanceState(arg0);
}
项目:Ymir
文件:PerspectiveActivity.java
private void savePerspectiveState(Perspective perspective,PerspectiveInstance perspectiveInstance) {
SavedState savedState = getSupportFragmentManager().saveFragmentInstanceState(perspective);
perspectiveInstance.setSavedState(savedState);
perspectiveInstance.setHasUnfinishedWork(perspective.hasUnfinishedWork());
}
项目:Ymir
文件:PerspectiveActivity.java
public SavedState getSavedState() {
return savedState;
}
项目:Ymir
文件:PerspectiveActivity.java
public void setSavedState(SavedState savedState) {
this.savedState = savedState;
}
项目:solved-hacking-problem
文件:C0010g.java
public SavedState m89a(Parcel parcel) {
return new SavedState(parcel,null);
}
项目:solved-hacking-problem
文件:C0010g.java
public SavedState[] m90a(int i) {
return new SavedState[i];
}
项目:android-multibackstack
文件:BackStackEntry.java
public BackStackEntry(@NonNull String fname,@Nullable SavedState state,@Nullable Bundle args) {
this.fname = fname;
this.state = state;
this.args = args;
}
项目:Ymir
文件:AndroidBugsUtils.java
/**
* Contorno para o bug: https://code.google.com/p/android/issues/detail?id=37484
* <br>
* O {@link android.os.Bundle} do SavedState não fica com o ClassLoader certo depois de ser restaurado de uma activity que foi destruída,* ocasionando em um BadParcelableException -> ClassNotFoundException.<br>
* O contorno é setar o ClassLoader correto no SavedState.
*
* @param savedState SavedState que será ajeitado.
* @param context contexto cujo o ClassLoader será colocado no SavedState.
*/
public static void applyWorkaroundForBug37484(SavedState savedState,Context context) {
savedState.mState.setClassLoader(context.getClassLoader());
}
项目:letv
文件:FragmentManager.java
public abstract SavedState saveFragmentInstanceState(Fragment fragment);
public abstract SavedState saveFragmentInstanceState(Fragment fragment);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。