Jawaban:
Jawaban utama bergantung pada nama yang dihasilkan oleh framework. Jika itu pernah berubah, maka itu tidak akan berfungsi lagi.
Bagaimana dengan solusi ini, mengesampingkan instantiateItem()
dan destroyItem()
dari Anda 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);
}
}
Ini sepertinya bekerja untuk saya ketika berhadapan dengan Fragmen yang tersedia. Fragmen yang belum dipakai, akan mengembalikan nol saat menelepon getRegisteredFragment
. Tapi saya telah menggunakan ini sebagian besar untuk mendapatkan arus Fragment
keluar dari ViewPager
: adapater.getRegisteredFragment(viewPager.getCurrentItem())
dan ini tidak akan kembali null
.
Saya tidak mengetahui adanya kelemahan lain dari solusi ini. Jika ada, saya ingin tahu.
MyPagerAdapter
dihancurkan karena siklus hidup (yaitu memutar), tidak registerdFragments
akan hilang? Apakah Activity
/ Fragment
menggunakan MyPagerAdapter
harus menyimpannya onSaveInstanceState
, dan kemudian perlu memperbaruinya dengan FragmentManager
ref baru ?
getItem
tidak dipanggil lagi pada rotate (untuk setiap fragmen yang sudah dibuat), karena FragmentManager
mengembalikan status yang Fragments
dipegangnya dalam pager. Jika instantiateItem
dipanggil ketika masing Fragment
- masing dipulihkan, maka solusi ini sebenarnya lebih aman dan lebih banyak bukti di masa depan daripada milik saya atau jawaban yang diterima. Saya akan mempertimbangkan untuk mencoba ini sendiri.
Untuk mengambil fragmen dari ViewPager ada banyak jawaban di sini dan di utas / blog SO terkait lainnya. Semua orang yang saya lihat rusak, dan mereka umumnya tampak jatuh ke dalam salah satu dari dua jenis yang tercantum di bawah ini. Ada beberapa solusi yang valid lain jika Anda hanya ingin mengambil fragmen saat ini, seperti ini jawaban lain di thread ini.
Jika menggunakan FragmentPagerAdapter
lihat di bawah. Jika menggunakan FragmentStatePagerAdapter
nilainya melihat ini . Indeks ambil yang bukan yang sekarang di FragmentStateAdapter tidak berguna karena pada dasarnya ini akan sepenuhnya dihancurkan keluar dari tampilan / keluar dari batas offScreenLimit.
Salah: Pertahankan daftar fragmen internal Anda sendiri, ditambahkan ke saat FragmentPagerAdapter.getItem()
dipanggil
SparseArray
atauMap
getItem
yang disebut pertama kali halaman digulir ke (atau diperoleh jika Anda ViewPager.setOffscreenPageLimit(x)
> 0) di ViewPager
, jika hosting Activity
/ Fragment
terbunuh atau dimulai ulang maka internal SpaseArray
akan dihapus ketika kustom FragmentPagerActivity dibuat ulang, tetapi di belakang layar, ViewPagers fragmen internal yang akan diciptakan, dan getItem
akan tidak dipanggil untuk salah satu indeks, sehingga kemampuan untuk mendapatkan fragmen dari indeks akan hilang selamanya. Anda dapat menjelaskan ini dengan menyimpan dan mengembalikan referensi fragmen ini melalui FragmentManager.getFragment()
dan putFragment
tetapi ini mulai mendapatkan IMHO berantakan.Salah: Bangun id tag Anda sendiri sesuai dengan apa yang digunakan di bawah kapFragmentPagerAdapter
dan gunakan ini untuk mengambil fragmen halaman dariFragmentManager
ViewPager
yang dapat berubah kapan saja atau untuk versi OS apa pun.Metode yang diciptakan untuk solusi ini adalah
private static String makeFragmentName(int viewId, long id) {
return "android:switcher:" + viewId + ":" + id;
}
ViewPager.instantiateItem()
Pendekatan yang mirip dengan di getItem()
atas tetapi tidak merusak siklus adalah untuk ini adalah untuk menghubungkan ke instantiateItem()
bukan getItem()
sebagai yang pertama akan dipanggil setiap kali indeks dibuat / diakses. Lihat jawaban ini
FragmentViewPager
Buat FragmentViewPager
kelas Anda sendiri dari sumber lib dukungan terbaru dan ubah metode yang digunakan secara internal untuk membuat tag fragmen. Anda bisa menggantinya dengan yang di bawah ini. Ini memiliki keuntungan bahwa Anda tahu pembuatan tag tidak akan pernah berubah dan Anda tidak mengandalkan api / metode pribadi, yang selalu berbahaya.
/**
* @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;
}
Kemudian seperti yang dikatakan oleh doc, ketika Anda ingin mengambil sebuah fragmen yang digunakan untuk indeks, panggil saja sesuatu seperti metode ini (yang dapat Anda masukkan ke dalam custom FragmentPagerAdapter
atau subclass) karena menyadari hasilnya mungkin nol jika getItem belum dipanggil untuk yaitu halaman itu belum dibuat.
/**
* @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;
}
Ini adalah solusi sederhana dan menyelesaikan masalah di dua solusi lain yang ditemukan di mana-mana di web
instantiateItem()
mana adalah ketika Anda ingin mengakses sebuah fragmen yang belum dikunjungi setelah peristiwa siklus hidup telah terjadi dan dikunjungi sebelum acara siklus hidup. Perbedaan kecil yang saya tahu tetapi salah satu yang menyebabkan bug halus dalam program saya maka saya mencari tahu ini.
getItemId(pos)
di dalamFragmentStatePagerAdapter
Tambahkan metode selanjutnya ke FragmentPagerAdapter Anda:
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) harus berfungsi.
Berikut adalah solusi yang diimplementasikan ke dalam ViewPager https://gist.github.com/jacek-marchwicki/d6320ba9a910c514424d . Jika sesuatu gagal, Anda akan melihat log kerusakan yang bagus.
Solusi sederhana lain:
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()
yang disebut setelah ViewPager.OnPageChangeListener#onPageSelected()
saya tidak dapat menggunakannya :-(
Saya tahu ini memiliki beberapa jawaban, tetapi mungkin ini akan membantu seseorang. Saya telah menggunakan solusi yang relatif sederhana ketika saya perlu mendapatkan Fragment
dari saya ViewPager
. Di Activity
atau Fragment
memegang ViewPager
, Anda dapat menggunakan kode ini untuk menggilir setiap Fragment
memegangnya.
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.
}
}
Jika Anda tahu posisi Anda Fragment
di ViewPager
, Anda bisa menelepon getItem(knownPosition)
.
Jika Anda tidak tahu posisi Anda Fragment
di ViewPager
, Anda dapat meminta anak-anak Anda Fragments
mengimplementasikan antarmuka dengan metode seperti getUniqueId()
, dan menggunakannya untuk membedakan mereka. Atau Anda dapat menelusuri semua Fragments
dan memeriksa jenis kelas, sepertiif(viewPagerFragment instanceof FragmentClassYouWant)
!!! Sunting !!!
Saya telah menemukan bahwa getItem
hanya dipanggil oleh FragmentPagerAdapter
ketika masing-masing Fragment
perlu dibuat pertama kali , setelah itu, tampaknya Fragments
yang didaur ulang menggunakan FragmentManager
. Dengan cara ini, banyak implementasi FragmentPagerAdapter
buat baru Fragment
di getItem
. Menggunakan metode saya di atas, ini berarti kita akan membuat yang baru Fragment
setiap kali getItem
dipanggil saat kita menelusuri semua item dalam FragmentPagerAdapter
. Karena ini, saya telah menemukan pendekatan yang lebih baik, menggunakan FragmentManager
untuk mendapatkan masing-masing Fragment
sebagai gantinya (menggunakan jawaban yang diterima). Ini adalah solusi yang lebih lengkap, dan telah bekerja dengan baik untuk saya.
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
}
}
}
Dan Anda akan membutuhkan metode ini.
private static String makeFragmentName(int viewId, int position) {
return "android:switcher:" + viewId + ":" + position;
}
ViewPager
itu sendiri yang mengatur tag tersebut. Solusi ini rapuh karena bergantung pada mengetahui konvensi penamaan "tersembunyi" dari ViewPager
. Jawaban Streets of Boston adalah solusi yang jauh lebih komprehensif, yang sekarang saya gunakan dalam proyek saya (bukan pendekatan ini).
Untuk kasus saya, tidak ada solusi di atas yang berfungsi.
Namun karena saya menggunakan Child Fragment Manager di Fragmen, berikut ini digunakan:
Fragment f = getChildFragmentManager().getFragments().get(viewPager.getCurrentItem());
Ini hanya akan berfungsi jika fragmen Anda di Manajer sesuai dengan item viewpager.
Untuk mendapatkan fragmen yang terlihat saat ini dari ViewPager . Saya menggunakan pernyataan sederhana ini dan berfungsi dengan baik.
public Fragment getFragmentFromViewpager()
{
return ((Fragment) (mAdapter.instantiateItem(mViewPager, mViewPager.getCurrentItem())));
}
Saya menanganinya dengan terlebih dahulu membuat daftar semua fragmen ( List<Fragment> fragments;
) yang akan saya gunakan kemudian menambahkannya ke pager sehingga memudahkan untuk menangani fragmen yang saat ini dilihat.
Begitu:
@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);
}
jadi ini bisa disebut:
public Fragment getFragment(ViewPager pager){
Fragment theFragment = fragments.get(pager.getCurrentItem());
return theFragment;
}
jadi saya bisa membuangnya di pernyataan if yang hanya akan berjalan jika itu berada di fragmen yang benar
Fragment tempFragment = getFragment();
if(tempFragment == MyFragmentNo2.class){
MyFragmentNo2 theFrag = (MyFragmentNo2) tempFragment;
//then you can do whatever with the fragment
theFrag.costomFunction();
}
tapi itu hanya pendekatan hack dan slash saya tetapi berhasil untuk saya, saya menggunakannya jangan lakukan perubahan relevan untuk fragmen saya saat ini ditampilkan ketika tombol kembali ditekan.
Ini berdasarkan jawaban Steven di atas. Ini akan mengembalikan instance fragmen aktual yang sudah dilampirkan ke aktivitas induk.
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
}
}
}
}
Saya tidak dapat menemukan cara yang sederhana dan bersih untuk melakukan ini. Namun, widget ViewPager hanyalah ViewGroup lain, yang menampung fragmen Anda. ViewPager memiliki fragmen ini sebagai anak langsung. Jadi Anda bisa mengulanginya (menggunakan .getChildCount () dan .getChildAt ()), dan lihat apakah instance fragmen yang Anda cari saat ini dimuat ke dalam ViewPager dan dapatkan referensi untuk itu. Misalnya, Anda dapat menggunakan beberapa bidang ID unik statis untuk membedakan fragmen.
Perhatikan bahwa ViewPager mungkin tidak memuat fragmen yang Anda cari karena ini adalah wadah virtual seperti ListView.
FragmentPagerAdapter adalah pabrik fragmen. Untuk menemukan fragmen berdasarkan posisinya jika masih dalam memori gunakan ini:
public Fragment findFragmentByPosition(int position) {
FragmentPagerAdapter fragmentPagerAdapter = getFragmentPagerAdapter();
return getSupportFragmentManager().findFragmentByTag(
"android:switcher:" + getViewPager().getId() + ":"
+ fragmentPagerAdapter.getItemId(position));
}
Kode sampel untuk v4 mendukung api.
Anda tidak perlu menelepon getItem()
atau metode lain di tahap selanjutnya untuk mendapatkan referensi dari Fragment
host yang ada di dalamnya ViewPager
. Jika Anda ingin memperbarui beberapa data di dalam Fragment
kemudian gunakan pendekatan ini: Perbarui ViewPager secara dinamis?
Kuncinya adalah mengatur data baru di dalam Adaper
dan menelepon notifyDataSetChanged()
yang pada gilirannya akan memanggil getItemPosition()
, memberikan Anda referensi Anda Fragment
dan memberi Anda kesempatan untuk memperbaruinya. Semua cara lain mengharuskan Anda untuk tetap merujuk pada diri sendiri atau peretasan lain yang bukan solusi yang baik.
@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()
adalah metode di adaptor Anda. Anda tidak akan menyebutnya secara langsung. Anda memiliki referensi adaptor Anda sehingga Anda memanggil adapter.notifyDataSetChanged()
yang pada gilirannya akan memanggil getItemPosition()
adaptor Anda dengan melewati referensi Anda Fragment
. Anda dapat melihat implementasi penuh dalam aksi di sini stackoverflow.com/questions/19891828/…
Fragment
tetapi bagaimana untuk mendapatkan referensi dapat diperdebatkan. Solusi lain mendapatkan referensi dari FragmentManager
menggunakan string yang mirip "android:switcher:"+id
atau kembali POSITION_NONE
dari getItemosition()
menyebabkan semua fragmen dibuat ulang sendiri.
Harus meluas FragmentPagerAdapter
ke kelas adaptor ViewPager Anda.
Jika Anda menggunakan FragmentStatePagerAdapter
maka Anda tidak akan dapat menemukan Fragment
dengan AndaID
public static String makeFragmentName(int viewPagerId, int index) {
return "android:switcher:" + viewPagerId + ":" + index;
}
Cara menggunakan metode ini: -
Fragment mFragment = ((FragmentActivity) getContext()).getSupportFragmentManager().findFragmentByTag(
AppMethodUtils.makeFragmentName(mViewPager.getId(), i)
);
InterestViewFragment newFragment = (InterestViewFragment) mFragment;
Hai saya telah menjawab pertanyaan ini di sini . Pada dasarnya, Anda perlu mengganti
InstantiateItem objek publik (wadah ViewGroup, posisi int)
metode FragmentStatePagerAdapter.
Solusi terbaik adalah dengan menggunakan ekstensi yang kami buat di CodePath yang disebut SmartFragmentStatePagerAdapter . Mengikuti panduan itu, ini membuat pengambilan fragmen dan fragmen yang saat ini dipilih dari ViewPager secara signifikan lebih mudah. Itu juga melakukan pekerjaan yang lebih baik mengelola memori fragmen yang tertanam dalam adaptor.
Cara termudah dan paling ringkas. Jika semua fragmen Anda ViewPager
berasal dari kelas yang berbeda, Anda dapat mengambil dan membedakannya sebagai berikut:
public class MyActivity extends Activity
{
@Override
public void onAttachFragment(Fragment fragment) {
super.onAttachFragment(fragment);
if (fragment.getClass() == MyFragment.class) {
mMyFragment = (MyFragment) fragment;
}
}
}
Saya menerapkan ini dengan mudah dengan pendekatan yang sedikit berbeda.
Metode FragmentAdapter.getItem kustom saya mengembalikan bukan MyFragment baru (), tetapi contoh MyFragment yang dibuat dalam konstruktor FragmentAdapter.
Dalam aktivitas saya, saya kemudian mendapatkan fragmen dari adaptor, periksa apakah itu instance dari fragmen yang diperlukan, lalu cor dan gunakan metode yang diperlukan.
Buat id sumber daya integer di /values/integers.xml
<integer name="page1">1</integer>
<integer name="page2">2</integer>
<integer name="page3">3</integer>
Kemudian dalam fungsi 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;
}
Kemudian dalam aktivitas menulis fungsi ini untuk mendapatkan referensi fragmen:
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;
}
Dapatkan referensi fragmen dengan memanggil fungsi di atas dan kemudian serahkan ke fragmen khusus Anda:
Fragment fragment = getFragmentByPosition(position);
if (fragment != null) {
FragmentOne fragmentOne = (FragmentOne) fragment;
}
Cara mudah untuk beralih pada fragmen di manajer fragmen. Temukan viewpager, yang memiliki argumen posisi bagian, ditempatkan di newInstance PlaceholderFragment statis publik (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;
}
Dalam Fragmen
public int getArgument(){
return mPage;
{
public void update(){
}
Dalam 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();
}
}
di TabLayout ada beberapa tab untuk Fragment. Anda dapat menemukan fragmen dengan Tag menggunakan indeks fragmen.
Misalnya indeks untuk Fragment1 adalah 0, jadi dalam findFragmentByTag()
metode, lulus tag untuk Viewpager. Setelah menggunakan fragmentTransaction Anda dapat menambahkan, ganti fragmen.
String tag = "android:switcher:" + R.id.viewPager + ":" + 0;
Fragment1 f = (Fragment1) getSupportFragmentManager().findFragmentByTag(tag);
Ok untuk adaptor FragmentStatePagerAdapter
saya mendanai solusi:
di FragmentActivity Anda:
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);
dan buat sebuah metode di kelas Anda FragmentActivity - Sehingga metode itu memberi Anda akses ke Fragmen Anda, Anda hanya perlu memberikannya posisi fragmen yang Anda inginkan:
public Fragment getActiveFragment(int position) {
String name = MyPagerAdapter.makeFragmentName(position);
return getSupportFragmentManager().findFragmentByTag(name);
}
di Adaptor Anda:
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
adalah tempat fragmen dalam adaptor seperti yang Anda tambahkan fragment1
dulu sehingga retreive fragment1
pass index
sebagai 0 dan seterusnya untuk istirahat
Fragment
dalamWeakReference
untuk menjamin Anda tidak mencegah fragmen hancur dari yang sampah yang dikumpulkan? Sepertinya hal yang tepat untuk dilakukan ...