2016-09-19 82 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。您可以使用此方法而不是手动设置当前项目。

相关问题