微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android.support.v4.app.Fragment.SavedState的实例源码

项目: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;
}
项目:boohee_v5.6    文件FragmentStatePagerAdapter.java   
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;
}
项目:boohee_v5.6    文件FragmentStatePagerAdapter.java   
public void restoreState(Parcelable state,"Bad fragment at key " + key);
                }
            }
        }
    }
}
项目:boohee_v5.6    文件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;
}
项目: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);
项目:boohee_v5.6    文件FragmentManager.java   
public abstract SavedState saveFragmentInstanceState(Fragment fragment);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。