8

我有一個10頁的ViewPager。當我開始我的片段的最後(第10)頁onCreateView()方法被調用。當我滑動到第9頁onCreateView()也被稱爲。但是當我回到第10頁onCreateView()沒有被調用。怎麼了?ViewPager - 並不總是調用onCreateView

+0

發佈代碼以瞭解我們正在進行的操作 – Paulo 2014-08-29 18:36:48

+0

您的ViewPager適配器可能會導致此問題。但我不知道沒有看到你的代碼... – 2014-08-29 18:37:07

+0

這個問題的任何適當的解決方案? – Gibs 2018-02-02 05:52:03

回答

0

沒有錯。 ViewPager已經有該頁面,所以它不需要創建它。

+0

但我想更新頁面... – Bakus123 2014-08-29 18:50:58

+0

@ Bakus123:然後更新*現有頁面*。 – CommonsWare 2014-08-29 18:52:04

+2

當沒有任何方法(onStart,OnCreate,onCreateView)沒有被吸入時,我該怎麼做? – Bakus123 2014-08-29 19:19:10

2

這是因爲FragmentPagerAdapter會在內存中保留每個片段。因此,當你第一次訪問片段時,onCreate將被調用,但第二次Android會在內存中尋找,所以它不需要調用onCreate。

如果您需要在OnCreate中每次顯示片段時運行的代碼,你應該把它移動到的getItem(INT ID)

參見官方文檔:http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html

+0

謝謝,但我加了Log.i(「hello」,「hello」+ id); getItem方法,這個日誌我只能看到當我啓動viewpager。當我在頁面之間滑動時,它不會調用。 – Bakus123 2014-08-29 19:06:52

+0

好吧,嘗試重寫onResume方法。 – 2014-08-29 19:09:13

+0

onResume for Fragment或FragmentPagerAdapter? – Bakus123 2014-08-29 19:13:33

1

您可以從onPageSelect調用適配器的getItem,這也是在swipes上調用的,並將你的代碼放在getItem中,或者甚至放在onPageSeelect本身中。

1

我有同樣的問題,我的解決辦法是重新分配ViewPager實例的適配器,就像:

pager.setAdapter(adapter); 

這導致從viewPager了「mItems」屬性的重新啓動,並刪除緩存。

但我不知道這是否是一個安全的解決方案

0

CommonWare的回答是最好的,就像魅力: 簡單添加OnPageChangeListenerViewPager項目,像這樣:

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... 
5

嘗試擴展FragmentStatePagerAdapter

+0

哇!那工作..找出原因。謝謝:) – 2017-09-06 09:27:49

相關問題