带有标签的数据传输到ViewPager

时间:2019-04-16 06:16:58

标签: android android-viewpager

我试图以不同于通常的方式使用ViewPager和TabLayout。 我有5个标签,每个标签都有ViewPager,其中每个都有两个片段页面(A片段和B片段)。

对于每个选项卡,ViewPager需要显示具有不同信息的相同片段页面。 (例如,Tab的标题显示在“片段”中,Tab 1的标题为“ Android”,Tab 2的标题为“ IOS”)

由于FragmentPagerAdapter像下面那样在 getItem(int position)方法中设置了片段,因此我尝试在该方法(有关选项卡的信息)中发送这些信息。

我发现了问题,当我启动ViewPager并将其设置为适配器时,该适配器仅安装了一次,因此,当Tab 1的ViewPager已设置为A Fragment时,其标题为“ Android”,它将不会更改为当我将其转到第二个选项卡Tab2时会出现“ IOS”。

是否可以通过每个选项卡向ViewPager发送不同的信息来以不同的方式接收信息?

我写得太宽泛了吗?如果您需要更多具体信息,或者没有收到问题,请告诉我,我将为您进一步解释。

感谢您的帮助

我的FragmentPagerAdapter

public class ManagerPagerAdapter extends FragmentPagerAdapter{

....

    @Override
    public Fragment getItem(int position){

          ...

          /* I received informations about the tab, and setted to bundle.
           So thought each tab gives different bundle data to AFragment.
           But since the Adapter is setted only once, this method is not
           called more than once*/

          Bundle bundle = new Bundle();

          switch(position){
              case 0:
              AFragment fragment_a = new AFragment();
              fragment_a.setArguments(bundle);
              return fragment_a;

              case 1: //Not really matters
              BFragment fragment_b = new BFragment();
              return fragment_b;

          }
    }   
} 

我的TabLayout代码与其他示例没什么不同。

再次感谢您!

1 个答案:

答案 0 :(得分:0)

如果Activity需要能够侦听所选页面的更改或ViewPager周围的其他事件,那么我们只需要挂接到ViewPager上的ViewPager.OnPageChangeListener即可处理事件:

    pager.addOnPageChangeListener(new OnPageChangeListener() {
                            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// This method will be invoked when the current page is scrolled
                            }

                            public void onPageSelected(int position) {
        // set your title here for specic fagment
                //This method will be invoked when a new page becomes selected.



                            }

                            public void onPageScrollStateChanged(int state) {
    // Called when the scroll state changes: 
        // SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING                     

       }
                        });