2016-09-19 52 views
0

Hy,我是Android開發應用程序的新手,我想用tabLayout創建一個使用視圖尋呼機的應用程序。我也有一個包含列表的片段,我想創建這個片段每個頁面上都有不同的數據,具體取決於所選的標籤。我幾乎實現了這一點,但我在viewPager頁面創建時遇到了問題。我ViewPagerAdapter extemds FragmentStatePagerAdapter,它看起來像這樣:ViewPager幻燈片正在跳過第一個和最後一個片段

public class ViewPagerAdapter extends FragmentStatePagerAdapter{ 
    static final int NUM_ITEMS = 7; 


    public ViewPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Log.e("new instance",position+""); 
     Fragment fragment=null; 

     switch (position) 
     { 
      case 0: fragment=new ChannelListFragment(); 
       Log.e("new instance ",position+""); 
       break; 
      case 1: fragment= new ChannelListFragment(); 
       Log.e("new instance ",position+""); 

       break; 
      case 2: fragment=new ChannelListFragment(); 
       Log.e("new instance ",position+""); 

       break; 
      case 3: fragment=new ChannelListFragment(); 
       Log.e("new instance ",position+""); 

       break; 
      case 4: fragment=new ChannelListFragment(); 
       Log.e("new instance ",position+""); 

       break; 
      case 5: fragment=new ChannelListFragment(); 
       Log.e("new instance ",position+""); 

       break; 
      case 6: fragment=new ChannelListFragment(); 
       Log.e("new instance ",position+""); 

       break; 

     } 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return NUM_ITEMS; 
    } 
} 

在我的MainActivity我這樣做:

viewPager = (ViewPager) findViewById(R.id.pager); 
     final ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 

     viewPager.setAdapter(adapter); 

     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 

      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 
     }); 

    } 

問題上刷卡網頁:在活動第一次創建,在日誌中我看到爲第一個頁面創建位置0和位置1,然後爲第二個標籤創建位置2,爲第三個標籤創建位置3,爲第六個標籤創建位置3,爲最後一個創建位置4。在回滾時,創建4,3,2,1,0,第一個片段沒有任何內容。這會在根據選定選項卡設置數據時影響應用程序的功能。 你能否幫我解決這個問題,讓尋呼機在頁面上創建一個片段,包括項目0和項目6,最後一個?

+0

可能重複的[刷新ViewPager片段中的數據](http://stackoverflow.com/questions/36503779/refresh-data-in-viewpager-fragment)基本上,ViewPager保持當前片段和片段在任一側活着以保持快速滑動。如果您在加載時需要在每個片段中執行某些操作,請使用鏈接答案中描述的方法。 –

回答

0
 viewPager = (ViewPager) findViewById(R.id.pager); 
     final ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 

     viewPager.setAdapter(adapter); 
     tabLayout.setupWithViewPager(viewPager) // link the given ViewPager and this TabLayout together so that changes in one are automatically reflected in the other 
     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 

    } 

默認情況下,當前頁面的兩側被創建和緩存,使有一個良好的用戶體驗,當用戶滾動當前頁面左邊或右邊。 在你的情況下,當第一頁加載時(第1頁和第2頁被創建) 當你滑到第2頁時,1和2已經在內存中,因此只有頁面向右,即第三頁被加載等等。

請訪問link瞭解更多信息。

此外,tablayout提供了一個方便的方法setUpWithViewPager用於鏈接viewpager和tablayout。您可以使用此方法而不是手動設置當前項目。

相關問題