Odpowiedzi:
Główna odpowiedź opiera się na nazwie generowanej przez środowisko. Jeśli to się kiedykolwiek zmieni, to przestanie działać.
Co z tym rozwiązaniem, nadpisaniem instantiateItem()
i destroyItem()
z Fragment(State)PagerAdapter
:
public class MyPagerAdapter extends FragmentStatePagerAdapter {
SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return ...;
}
@Override
public Fragment getItem(int position) {
return MyFragment.newInstance(...);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = (Fragment) super.instantiateItem(container, position);
registeredFragments.put(position, fragment);
return fragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
registeredFragments.remove(position);
super.destroyItem(container, position, object);
}
public Fragment getRegisteredFragment(int position) {
return registeredFragments.get(position);
}
}
Wydaje mi się, że to działa w przypadku dostępnych fragmentów. Fragmenty, które nie zostały jeszcze utworzone, zwracają wartość NULL podczas wywoływania getRegisteredFragment
. Ale używałem tego głównie, aby wyciągnąć prąd Fragment
z ViewPager
: adapater.getRegisteredFragment(viewPager.getCurrentItem())
i to nie wróci null
.
Nie znam żadnych innych wad tego rozwiązania. Jeśli są, chciałbym wiedzieć.
MyPagerAdapter
zostanie zniszczony z powodu cyklu życia (tj. Obracania), nie registerdFragments
zostanie utracony? Czy użytkownik Activity
/ Fragment
using będzie MyPagerAdapter
musiał go zapisać onSaveInstanceState
, a następnie będzie musiał zaktualizować go o nowy numer FragmentManager
referencyjny?
getItem
nie jest wywoływane ponownie przy obracaniu (dla wszystkich fragów, które już zostały utworzone), ponieważ FragmentManager
przywraca stany, Fragments
które utrzymuje w pager. Jeśli instantiateItem
zostanie wywołane po Fragment
przywróceniu każdego z nich , wówczas to rozwiązanie jest w rzeczywistości bezpieczniejsze i bardziej przyszłościowe niż moje lub zaakceptowana odpowiedź. Zastanowię się nad próbowaniem tego sam.
Aby pobrać fragmenty z ViewPager, istnieje wiele odpowiedzi tutaj i na innych powiązanych wątkach / blogach SO. Wszyscy, których widziałem, są załamani i ogólnie wydają się należeć do jednego z dwóch wymienionych poniżej typów. Są też inne ważne rozwiązania, jeśli tylko chcą chwycić bieżącego fragmentu, jak to inna odpowiedź na tego wątku.
Jeśli używasz, FragmentPagerAdapter
patrz poniżej. Jeśli korzystasz, FragmentStatePagerAdapter
warto na to spojrzeć . Indeksy chwytania, które nie są bieżące w FragmentStateAdapter, nie są tak przydatne, ponieważ ze względu na swój charakter zostaną całkowicie zerwane, zniknęły z widoku / poza granicami offScreenLimit.
Źle: prowadź własną wewnętrzną listę fragmentów, dodawaną, kiedy FragmentPagerAdapter.getItem()
zostanie wywołana
SparseArray
lubMap
getItem
nazywa się to tylko przy pierwszym przewinięciu strony do (lub uzyskaniu, jeśli twoje ViewPager.setOffscreenPageLimit(x)
> 0) w ViewPager
, jeśli hosting Activity
/ Fragment
zostanie zabity lub zrestartowany, wewnętrzny SpaseArray
zostanie usunięty po odtworzeniu niestandardowego FragmentPagerActivity, ale za kulisami ViewPagers wewnętrzne fragmenty zostaną odtworzone, i getItem
będzie nie być nazywany dla każdego z indeksów, więc zdolność do uzyskania fragmentu z indeksu zostaną utracone na zawsze. Można wyjaśnić to zapisując się i przywracania tych fragmentów poprzez referencje FragmentManager.getFragment()
, a putFragment
jednak ten rozpoczyna się bałagan IMHO.Źle: Stwórz własny identyfikator tagu pasujący do tego, co jest używane pod maskąFragmentPagerAdapter
i użyj tego, aby pobrać fragmenty strony zFragmentManager
ViewPager
która mogłaby zmienić w dowolnym momencie lub dla dowolnej wersji systemu operacyjnego.Metodą odtworzoną dla tego rozwiązania jest
private static String makeFragmentName(int viewId, long id) {
return "android:switcher:" + viewId + ":" + id;
}
ViewPager.instantiateItem()
Podejście podobne do getItem()
powyższego, ale bez przerywania cyklu życia, polega na przyłączeniu się do instantiateItem()
niego, getItem()
ponieważ to pierwsze będzie wywoływane za każdym razem, gdy indeks jest tworzony / dostępny. Zobacz tę odpowiedź
FragmentViewPager
Zbuduj własną FragmentViewPager
klasę ze źródła najnowszej biblioteki wsparcia i zmień metodę używaną wewnętrznie do generowania znaczników fragmentu. Możesz go zastąpić poniższym. Ma to tę zaletę, że wiesz, że tworzenie tagów nigdy się nie zmieni i nie polegasz na prywatnym API / metodzie, co zawsze jest niebezpieczne.
/**
* @param containerViewId the ViewPager this adapter is being supplied to
* @param id pass in getItemId(position) as this is whats used internally in this class
* @return the tag used for this pages fragment
*/
public static String makeFragmentName(int containerViewId, long id) {
return "android:switcher:" + containerViewId + ":" + id;
}
Następnie, jak mówi doktor, gdy chcesz pobrać fragment używany do indeksu, po prostu wywołaj coś takiego jak ta metoda (którą możesz umieścić w niestandardowej FragmentPagerAdapter
lub podklasie), mając świadomość, że wynik może być zerowy, jeśli getItem nie został jeszcze wywołany ta strona, tj. nie została jeszcze utworzona.
/**
* @return may return null if the fragment has not been instantiated yet for that position - this depends on if the fragment has been viewed
* yet OR is a sibling covered by {@link android.support.v4.view.ViewPager#setOffscreenPageLimit(int)}. Can use this to call methods on
* the current positions fragment.
*/
public @Nullable Fragment getFragmentForPosition(int position)
{
String tag = makeFragmentName(mViewPager.getId(), getItemId(position));
Fragment fragment = getSupportFragmentManager().findFragmentByTag(tag);
return fragment;
}
Jest to proste rozwiązanie, które rozwiązuje problemy z dwoma pozostałymi rozwiązaniami znajdowanymi wszędzie w Internecie
instantiateItem()
który ma miejsce, gdy chcesz uzyskać dostęp do fragmentu, który nie był jeszcze odwiedzany po zdarzeniu cyklu życia i był odwiedzany przed zdarzeniem cyklu życia. Mała różnica, którą znam, ale ta, która doprowadziła do subtelnego błędu w moim programie, dlatego patrzę na to.
getItemId(pos)
środkuFragmentStatePagerAdapter
Dodaj kolejne metody do FragmentPagerAdapter:
public Fragment getActiveFragment(ViewPager container, int position) {
String name = makeFragmentName(container.getId(), position);
return mFragmentManager.findFragmentByTag(name);
}
private static String makeFragmentName(int viewId, int index) {
return "android:switcher:" + viewId + ":" + index;
}
getActiveFragment (0) musi działać.
Oto rozwiązanie zaimplementowane w ViewPager https://gist.github.com/jacek-marchwicki/d6320ba9a910c514424d . Jeśli coś zawiedzie, zobaczysz dobry dziennik awarii.
Kolejne proste rozwiązanie:
public class MyPagerAdapter extends FragmentPagerAdapter {
private Fragment mCurrentFragment;
public Fragment getCurrentFragment() {
return mCurrentFragment;
}
//...
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
if (getCurrentFragment() != object) {
mCurrentFragment = ((Fragment) object);
}
super.setPrimaryItem(container, position, object);
}
}
setPrimaryItem()
się nazywa po tym, ViewPager.OnPageChangeListener#onPageSelected()
że nie mogę go użyć :-(
Wiem, że to ma kilka odpowiedzi, ale może to komuś pomoże. Użyłem stosunkowo prostego rozwiązania, gdy potrzebowałem uzyskać Fragment
od siebie ViewPager
. W twojej Activity
lub Fragment
gospodarstwa ViewPager
, można użyć tego kodu, aby przejść przez każdy Fragment
go posiada.
FragmentPagerAdapter fragmentPagerAdapter = (FragmentPagerAdapter) mViewPager.getAdapter();
for(int i = 0; i < fragmentPagerAdapter.getCount(); i++) {
Fragment viewPagerFragment = fragmentPagerAdapter.getItem(i);
if(viewPagerFragment != null) {
// Do something with your Fragment
// Check viewPagerFragment.isResumed() if you intend on interacting with any views.
}
}
Jeśli znasz swoją pozycję Fragment
w ViewPager
, możesz po prostu zadzwonić getItem(knownPosition)
.
Jeśli nie wiesz na pozycję Fragment
w ViewPager
, można mieć dzieci Fragments
zaimplementować interfejs z metodą jak getUniqueId()
i używać, aby je odróżnić. Możesz też przewijać wszystkie Fragments
i sprawdzać typ klasy, npif(viewPagerFragment instanceof FragmentClassYouWant)
!!! EDYTOWAĆ !!!
Odkryłem, że getItem
wywoływany jest tylko FragmentPagerAdapter
wtedy, gdy każdy Fragment
musi zostać utworzony za pierwszym razem , potem wydaje się, że Fragments
są one przetwarzane za pomocą FragmentManager
. W ten sposób wiele implementacji FragmentPagerAdapter
tworzy nowe Fragment
s w getItem
. Używając mojej powyższej metody, oznacza to, że będziemy tworzyć nowe Fragment
s za każdym razem, gdy getItem
zostanie wywołane, gdy przejdziemy przez wszystkie elementy w FragmentPagerAdapter
. Z tego powodu znalazłem lepsze podejście, używając zamiast tego FragmentManager
każdego z nich Fragment
(używając zaakceptowanej odpowiedzi). To jest bardziej kompletne rozwiązanie i działało dla mnie dobrze.
FragmentPagerAdapter fragmentPagerAdapter = (FragmentPagerAdapter) mViewPager.getAdapter();
for(int i = 0; i < fragmentPagerAdapter.getCount(); i++) {
String name = makeFragmentName(mViewPager.getId(), i);
Fragment viewPagerFragment = getChildFragmentManager().findFragmentByTag(name);
// OR Fragment viewPagerFragment = getFragmentManager().findFragmentByTag(name);
if(viewPagerFragment != null) {
// Do something with your Fragment
if (viewPagerFragment.isResumed()) {
// Interact with any views/data that must be alive
}
else {
// Flag something for update later, when this viewPagerFragment
// returns to onResume
}
}
}
Będziesz potrzebował tej metody.
private static String makeFragmentName(int viewId, int position) {
return "android:switcher:" + viewId + ":" + position;
}
ViewPager
Sam ustawia te tagi. To rozwiązanie jest kruche, ponieważ polega na znajomości „ukrytej” konwencji nazewnictwa ViewPager
. Odpowiedź na ulice Bostonu to znacznie bardziej kompleksowe rozwiązanie, którego teraz używam w swoim projekcie (zamiast tego podejścia).
W moim przypadku żadne z powyższych rozwiązań nie zadziałało.
Ponieważ jednak używam menedżera fragmentów potomnych w fragmencie, użyto następujących elementów:
Fragment f = getChildFragmentManager().getFragments().get(viewPager.getCurrentItem());
Działa to tylko wtedy, gdy twoje fragmenty w Menedżerze odpowiadają elementowi przeglądarki.
Aby uzyskać bieżący widoczny fragment z ViewPager . Używam tego prostego stwierdzenia i działa dobrze.
public Fragment getFragmentFromViewpager()
{
return ((Fragment) (mAdapter.instantiateItem(mViewPager, mViewPager.getCurrentItem())));
}
Poradziłem sobie z tym, tworząc najpierw listę wszystkich fragmentów ( List<Fragment> fragments;
), których zamierzałem użyć, a następnie dodałem je do pagera, aby ułatwić obsługę aktualnie oglądanego fragmentu.
Więc:
@Override
onCreate(){
//initialise the list of fragments
fragments = new Vector<Fragment>();
//fill up the list with out fragments
fragments.add(Fragment.instantiate(this, MainFragment.class.getName()));
fragments.add(Fragment.instantiate(this, MenuFragment.class.getName()));
fragments.add(Fragment.instantiate(this, StoresFragment.class.getName()));
fragments.add(Fragment.instantiate(this, AboutFragment.class.getName()));
fragments.add(Fragment.instantiate(this, ContactFragment.class.getName()));
//Set up the pager
pager = (ViewPager)findViewById(R.id.pager);
pager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager(), fragments));
pager.setOffscreenPageLimit(4);
}
więc można to nazwać:
public Fragment getFragment(ViewPager pager){
Fragment theFragment = fragments.get(pager.getCurrentItem());
return theFragment;
}
więc mogłem wrzucić go do instrukcji if, która działałaby tylko wtedy, gdyby znajdowała się we właściwym fragmencie
Fragment tempFragment = getFragment();
if(tempFragment == MyFragmentNo2.class){
MyFragmentNo2 theFrag = (MyFragmentNo2) tempFragment;
//then you can do whatever with the fragment
theFrag.costomFunction();
}
ale to tylko moje podejście do hack and slash, ale zadziałało dla mnie, używam go, wprowadzam zmiany w moim aktualnie wyświetlanym fragmencie, gdy przycisk Wstecz jest wciśnięty.
Jest to oparte na powyższej odpowiedzi Stevena. Zwróci to faktyczną instancję fragmentu, który jest już dołączony do działania nadrzędnego.
FragmentPagerAdapter fragmentPagerAdapter = (FragmentPagerAdapter) mViewPager.getAdapter();
for(int i = 0; i < fragmentPagerAdapter.getCount(); i++) {
Fragment viewPagerFragment = (Fragment) mViewPager.getAdapter().instantiateItem(mViewPager, i);
if(viewPagerFragment != null && viewPagerFragment.isAdded()) {
if (viewPagerFragment instanceof FragmentOne){
FragmentOne oneFragment = (FragmentOne) viewPagerFragment;
if (oneFragment != null){
oneFragment.update(); // your custom method
}
} else if (viewPagerFragment instanceof FragmentTwo){
FragmentTwo twoFragment = (FragmentTwo) viewPagerFragment;
if (twoFragment != null){
twoFragment.update(); // your custom method
}
}
}
}
Nie mogłem znaleźć prostego, czystego sposobu na zrobienie tego. Widżet ViewPager to jednak kolejna grupa ViewGroup, w której przechowywane są Twoje fragmenty. ViewPager ma te fragmenty jako bezpośrednie dzieci. Możesz więc po prostu iterować nad nimi (używając .getChildCount () i .getChildAt ()) i sprawdzić, czy szukana instancja fragmentu jest aktualnie załadowana do ViewPager i uzyskaj odniesienie do niej. Np. Możesz użyć statycznego unikalnego pola ID, aby rozdzielić fragmenty.
Zauważ, że ViewPager mógł nie załadować szukanego fragmentu, ponieważ jest to wirtualny kontener, taki jak ListView.
FragmentPagerAdapter to fabryka fragmentów. Aby znaleźć fragment na podstawie jego pozycji, jeśli nadal jest w pamięci, użyj tego:
public Fragment findFragmentByPosition(int position) {
FragmentPagerAdapter fragmentPagerAdapter = getFragmentPagerAdapter();
return getSupportFragmentManager().findFragmentByTag(
"android:switcher:" + getViewPager().getId() + ":"
+ fragmentPagerAdapter.getItemId(position));
}
Przykładowy kod interfejsu API obsługi v4.
ty musisz wywoływać getItem()
ani żadnej innej metody na późniejszym etapie, aby uzyskać referencję Fragment
hostowanego obiektu ViewPager
. Jeśli chcesz zaktualizować niektóre dane w środku, Fragment
skorzystaj z tego podejścia: dynamicznie aktualizować ViewPager?
Kluczem jest ustawienie nowych danych w środku Adaper
i połączenie, notifyDataSetChanged()
które z kolei zadzwoni getItemPosition()
, przekazując ci referencjeFragment
i dając szansę na ich aktualizację. Wszystkie inne sposoby wymagają zachowania odniesienia do siebie lub innego hacka, co nie jest dobrym rozwiązaniem.
@Override
public int getItemPosition(Object object) {
if (object instanceof UpdateableFragment) {
((UpdateableFragment) object).update(xyzData);
}
//don't return POSITION_NONE, avoid fragment recreation.
return super.getItemPosition(object);
}
getItemPosition()
jest metodą w twoim adapterze. Nie zadzwonisz bezpośrednio. Posiadasz numer referencyjny adaptera, więc dzwonisz, adapter.notifyDataSetChanged()
który z kolei wywoła getItemPosition()
adapter, przekazując numer referencyjny twojego adaptera Fragment
. Możesz zobaczyć pełną implementację w akcji tutaj stackoverflow.com/questions/19891828/…
Fragment
ale sposób uzyskania odniesienia jest dyskusyjny. Inne rozwiązania uzyskują referencje FragmentManager
przy użyciu łańcucha podobnego "android:switcher:"+id
lub powracającego POSITION_NONE
z getItemosition()
powodu spowodowania odtworzenia wszystkich fragmentów.
Musi rozszerzyć FragmentPagerAdapter
się na klasę adaptera ViewPager.
Jeśli używasz FragmentStatePagerAdapter
wtedy nie będzie w stanie znaleźć Fragment
przez jegoID
public static String makeFragmentName(int viewPagerId, int index) {
return "android:switcher:" + viewPagerId + ":" + index;
}
Jak korzystać z tej metody: -
Fragment mFragment = ((FragmentActivity) getContext()).getSupportFragmentManager().findFragmentByTag(
AppMethodUtils.makeFragmentName(mViewPager.getId(), i)
);
InterestViewFragment newFragment = (InterestViewFragment) mFragment;
Hej, odpowiedziałem na to pytanie tutaj . Zasadniczo musisz zastąpić
public Object instantiateItem (kontener ViewGroup, pozycja int)
Metoda FragmentStatePagerAdapter.
Najlepszym rozwiązaniem jest użycie rozszerzenia, które stworzyliśmy w CodePath o nazwie SmartFragmentStatePagerAdapter . Zgodnie z tym przewodnikiem znacznie ułatwia pobieranie fragmentów i aktualnie wybranego fragmentu z ViewPager. Lepsze jest także zarządzanie pamięcią fragmentów osadzonych w adapterze.
Najłatwiejszy i najbardziej zwięzły sposób. Jeśli wszystkie twoje fragmenty ViewPager
należą do różnych klas, możesz je odzyskać i rozróżnić w następujący sposób:
public class MyActivity extends Activity
{
@Override
public void onAttachFragment(Fragment fragment) {
super.onAttachFragment(fragment);
if (fragment.getClass() == MyFragment.class) {
mMyFragment = (MyFragment) fragment;
}
}
}
Zaimplementowałem to łatwe z nieco innym podejściem.
Moja niestandardowa metoda FragmentAdapter.getItem nie zwróciła nowej MyFragment (), ale instancję MyFragment, która została utworzona w konstruktorze FragmentAdapter.
Następnie w swojej działalności pobrałem fragment z adaptera, sprawdź, czy jest to instancja Potrzebny fragment, a następnie rzutuj i użyj potrzebnych metod.
Utwórz identyfikator zasobu całkowitego w /values/integers.xml
<integer name="page1">1</integer>
<integer name="page2">2</integer>
<integer name="page3">3</integer>
Następnie w funkcji getItem PagerAdapter:
public Fragment getItem(int position) {
Fragment fragment = null;
if (position == 0) {
fragment = FragmentOne.newInstance();
mViewPager.setTag(R.integer.page1,fragment);
}
else if (position == 1) {
fragment = FragmentTwo.newInstance();
mViewPager.setTag(R.integer.page2,fragment);
} else if (position == 2) {
fragment = FragmentThree.newInstance();
mViewPager.setTag(R.integer.page3,fragment);
}
return fragment;
}
Następnie w działaniu napisz tę funkcję, aby uzyskać odwołanie do fragmentu:
private Fragment getFragmentByPosition(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = (Fragment) mViewPager.getTag(R.integer.page1);
break;
case 1:
fragment = (Fragment) mViewPager.getTag(R.integer.page2);
break;
case 2:
fragment = (Fragment) mViewPager.getTag(R.integer.page3);
break;
}
return fragment;
}
Uzyskaj odwołanie do fragmentu, wywołując powyższą funkcję, a następnie rzutuj na niestandardowy fragment:
Fragment fragment = getFragmentByPosition(position);
if (fragment != null) {
FragmentOne fragmentOne = (FragmentOne) fragment;
}
Łatwy sposób na iterację fragmentów w menedżerze fragmentów. Znajdź viewpager, który ma argument pozycji sekcji, umieszczony w publicznym statycznym PlaceholderFragment newInstance (int sectionNumber) .
public PlaceholderFragment getFragmentByPosition(Integer pos){
for(Fragment f:getChildFragmentManager().getFragments()){
if(f.getId()==R.id.viewpager && f.getArguments().getInt("SECTNUM") - 1 == pos) {
return (PlaceholderFragment) f;
}
}
return null;
}
We fragmencie
public int getArgument(){
return mPage;
{
public void update(){
}
W FragmentActivity
List<Fragment> fragments = getSupportFragmentManager().getFragments();
for(Fragment f:fragments){
if((f instanceof PageFragment)&&(!f.isDetached())){
PageFragment pf = (PageFragment)f;
if(pf.getArgument()==pager.getCurrentItem())pf.update();
}
}
w TabLayout jest wiele zakładek dla Fragmentu. fragment można znaleźć według Tagu, korzystając z indeksu fragmentu.
Np. indeks dla Fragment1 wynosi 0, więc w findFragmentByTag()
metodzie przekaż znacznik dla Viewpager. po użyciu fragmentTransaction możesz dodać, zastąp fragment.
String tag = "android:switcher:" + R.id.viewPager + ":" + 0;
Fragment1 f = (Fragment1) getSupportFragmentManager().findFragmentByTag(tag);
Ok dla adaptera FragmentStatePagerAdapter
finansuję rozwiązanie:
w twoim FragmentActivity:
ActionBar mActionBar = getSupportActionBar();
mActionBar.addTab(mActionBar.newTab().setText("TAB1").setTabListener(this).setTag(Fragment.instantiate(this, MyFragment1.class.getName())));
mActionBar.addTab(mActionBar.newTab().setText("TAB2").setTabListener(this).setTag(Fragment.instantiate(this, MyFragment2.class.getName())));
mActionBar.addTab(mActionBar.newTab().setText("TAB3").setTabListener(this).setTag(Fragment.instantiate(this, MyFragment3.class.getName())));
viewPager = (STViewPager) super.findViewById(R.id.viewpager);
mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), mActionBar);
viewPager.setAdapter(this.mPagerAdapter);
i utwórz metodę w swojej klasie FragmentActivity - Aby ta metoda dała Ci dostęp do Twojego Fragmentu, wystarczy nadać mu pozycję żądanego fragmentu:
public Fragment getActiveFragment(int position) {
String name = MyPagerAdapter.makeFragmentName(position);
return getSupportFragmentManager().findFragmentByTag(name);
}
w twoim adapterze:
public class MyPagerAdapter extends FragmentStatePagerAdapter {
private final ActionBar actionBar;
private final FragmentManager fragmentManager;
public MyPagerAdapter(FragmentManager fragmentManager, com.actionbarsherlock.app.ActionBarActionBar mActionBar) {super(fragmentManager);
this.actionBar = mActionBar;
this.fragmentManager = fragmentManager;
}
@Override
public Fragment getItem(int position) {
getSupportFragmentManager().beginTransaction().add(mTchatDetailsFragment, makeFragmentName(position)).commit();
return (Fragment)this.actionBar.getTabAt(position);
}
@Override
public int getCount() {
return this.actionBar.getTabCount();
}
@Override
public CharSequence getPageTitle(int position) {
return this.actionBar.getTabAt(position).getText();
}
private static String makeFragmentName(int viewId, int index) {
return "android:fragment:" + index;
}
}
Fragment yourFragment = yourviewpageradapter.getItem(int index);
index
jest miejscem fragmentu w adapterze, który dodałeś jako fragment1
pierwszy, więc fragment1
przekaż ponownie index
jako 0 i tak dalej dla odpoczynku
Fragment
w,WeakReference
aby zagwarantować, że nie zapobiegniesz zbieraniu zniszczonego fragmentu? Wydaje się, że to właściwa rzecz ...