【问题标题】:Data transfer with tabs to ViewPager使用选项卡将数据传输到 ViewPager
【发布时间】:2019-04-16 06:16:57
【问题描述】:

我正在尝试以不同于通常的方式使用 ViewPager 和 TabLayout。 我有 5 个选项卡,每个选项卡都有 ViewPager,每个选项卡都有两个片段页面(A 片段和 B 片段)。

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

由于 FragmentPagerAdapter 在 getItem(int position) 方法中设置片段,如下所示,我尝试在该方法中发送这些信息(有关选项卡的信息)。

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

有什么方法可以将每个选项卡的不同信息发送到 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 代码与其他示例没有太大区别。

再次感谢!!!

【问题讨论】:

  • 您可以在ViewPager.OnPageChangeListener of ViewPager 期间更改标题。
  • 该方法仅在一个 ViewPager 中有效。我不是指一个 ViewPager,而是每个 ViewPager 设置到每个选项卡。并且每个ViewPager都需要表示tab的信息,但是由于制作每个tab的ViewPager效率低下,所以我正在寻找方法让ViewPager在每个Tab被选中时接收关于Tab的信息。 :)

标签: android android-viewpager


【解决方案1】:

如果 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                     

       }
                        });

【讨论】:

  • ViewPager 怎么知道 Fragment 被改变了?
  • tab改变时需要自动刷新。如何与 onTabSelectedListener() 有效地结合使用?
  • 好吧,因为我不需要 onPageScrolled 和 onPageScrollStateChanged,所以我在 onPageSelected 上试了一下。但是,由于 tablayout 和 ViewPager 是独立的,即在不同的布局中,tab 的变化不会影响 ViewPager Listener。即使我选择了另一个选项卡,ViewPager 也不会更改或刷新自身......对不起,我错过了什么......?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
相关资源
最近更新 更多