我有一個10頁的ViewPager。當我開始我的片段的最後(第10)頁onCreateView()
方法被調用。當我滑動到第9頁onCreateView()
也被稱爲。但是當我回到第10頁onCreateView()
沒有被調用。怎麼了?ViewPager - 並不總是調用onCreateView
回答
沒有錯。 ViewPager
已經有該頁面,所以它不需要創建它。
但我想更新頁面... – Bakus123 2014-08-29 18:50:58
@ Bakus123:然後更新*現有頁面*。 – CommonsWare 2014-08-29 18:52:04
當沒有任何方法(onStart,OnCreate,onCreateView)沒有被吸入時,我該怎麼做? – Bakus123 2014-08-29 19:19:10
這是因爲FragmentPagerAdapter會在內存中保留每個片段。因此,當你第一次訪問片段時,onCreate將被調用,但第二次Android會在內存中尋找,所以它不需要調用onCreate。
如果您需要在OnCreate中每次顯示片段時運行的代碼,你應該把它移動到的getItem(INT ID)
參見官方文檔:http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html
您可以從onPageSelect調用適配器的getItem,這也是在swipes上調用的,並將你的代碼放在getItem中,或者甚至放在onPageSeelect本身中。
我有同樣的問題,我的解決辦法是重新分配ViewPager實例的適配器,就像:
pager.setAdapter(adapter);
這導致從viewPager了「mItems」屬性的重新啓動,並刪除緩存。
但我不知道這是否是一個安全的解決方案
CommonWare的回答是最好的,就像魅力: 簡單添加OnPageChangeListener
您ViewPager
項目,像這樣:
ViewPager viewPager = null;
PagerAdapter pagerAdapter = null;
//Some code come here...
pagerAdapter = new PagerAdapter(); //Or any class derived from it
viewPager = (ViewPager)findViewById(R.id.container);//Connect it to XML
viewPager.setAdapter (mPagerAdapter); //Connect the two
//Next two lines are simply for fun...
//viewager.setPageTransformer(true, new DepthPageTransformer());
//viewPager.setPageTransformer(true, new PaymentZoomOutPageTransformer());
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//This is the right place to connect the pages with a data struct!!!
@Override
public void onPageSelected(int position) {
// Here you can connect the current displayed page with some data..
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
//Here use the inflater to add views/pages
//Don't forget to do:
pagerAdapter.notifyDataSetChanged();
//When you're done...
嘗試擴展FragmentStatePagerAdapter
哇!那工作..找出原因。謝謝:) – 2017-09-06 09:27:49
- 1. 當setAdapter被調用時,ViewPager並不總是刷新,FragmentStatePagerAdapter
- 2. 片段onCreateView方法TabLayout不調用ViewPagerAdapter
- 3. onCreateView未在ViewPager中使用片段調用
- 4. FragmentManager.executePendingTransactions不立即調用onCreateView()
- 5. onCreateView()ViewPager的childFragment的方法沒有被調用
- 6. OnPageChange片段裏面viewPager裏面片段之前調用onCreateView
- 7. 如何停止正在調用自定義ViewPager的onCreateView方法
- 8. Android NullPointerException異常ViewPager片段onCreateView但不是當swyping視圖
- 9. 調用setImageBitmap並不總是ImageView的
- 10. 並不總是調用tvOS preferredfocusedview
- 11. SyncAdapter onPerformSync並不總是被調用
- 12. FinderSync:beginObservingDirectoryAtURL並不總是被調用
- 13. 調用setVisible並不總是在操作
- 14. captureStillImageAsynchronouslyFromConnection:stillImageConnection completionHandler並不總是被調用
- 15. Rest API並不總是被調用
- 16. NSFetchedResultsController並不總是調用didChangeObject:atIndexPath:forChangeType:newIndexPath:NSFetchedResultsChangeMove
- 17. UIWebView並不總是調用 - [NSURLCache storeCachedResponse:forRequest:]
- 18. setNeedsDisplay並不總是調用的drawRect
- 19. 調用setNeedsDisplay並不總是觸發drawLayer:inContext:
- 20. OnCreateView調用兩次
- 21. onCreateView「自己調用」
- 22. onPrepareOptionsMenu onCreateView後調用
- 23. 爲什麼viewPager的中間選項卡從不爲自己調用onCreateView?
- 24. 的Android CommitNow不調用onCreateView從的onCreate
- 25. 片段onCreateView永遠不會被調用
- 26. Android:Camera.takePicturebacks回調並不總是觸發
- 27. Android onCreateView未被調用
- 28. onCreateView()的調用方法
- 29. Skype4Py:messageStatusChanged不總是調用
- 30. activity.on不總是被調用
發佈代碼以瞭解我們正在進行的操作 – Paulo 2014-08-29 18:36:48
您的ViewPager適配器可能會導致此問題。但我不知道沒有看到你的代碼... – 2014-08-29 18:37:07
這個問題的任何適當的解決方案? – Gibs 2018-02-02 05:52:03