【问题标题】:How can I refresh a tab when it becomes visible to the user?当标签对用户可见时如何刷新它?
【发布时间】:2018-12-07 13:24:27
【问题描述】:

我正在使用片段状态寻呼机适配器来处理不同片段的创建。

在我的应用程序中,开始选项卡是用户输入数据的地方,最后一个选项卡显示基于开始选项卡的报告。

问题是当我进入报告选项卡时,除了以前的选项卡信息外,所有内容都正确显示。似乎它正在创建选项卡之前它变得可见。

有什么方法可以只在报告选项卡可见时加载它?

【问题讨论】:

    标签: android android-viewpager android-tabs


    【解决方案1】:

    我相信您可以重写 setUserVisibleHint 方法来获得有关 framgent 可见性的通知

    https://developer.android.com/reference/android/support/v4/app/Fragment#setuservisiblehint

    【讨论】:

    • 如何调用来重新创建片段?
    • 您不需要重新创建片段,您只需重新加载数据即可
    【解决方案2】:
        OnPageChangeListener myOnPageChangeListener = new OnPageChangeListener(){ 
    @Override public void onPageScrollStateChanged(int state) {
     //Called when the scroll state changes.
    
     } 
    
    @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
     //This method will be invoked when the current page is scrolled, //either as part of a programmatically initiated smooth scroll //or a user initiated touch scroll. 
    } 
    
    
    @Override public void onPageSelected(int position) {
    //This method will be invoked when a new page becomes selected. 
    
            textMsg.append("onPageSelected:" + position + "\n"); }};
    

    现在将此侦听器添加到您的 viewpager

    viewPager.setOnPageChangeListener(myOnPageChangeListener)
    

    【讨论】:

      【解决方案3】:

      为了更新选项卡,我不得不通知数据集已更改为适配器,然后在视图寻呼机上重新设置。

      tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
              @Override
              public void onTabSelected(TabLayout.Tab tab) {
                  if(tab.getPosition() == areas.size()){
                      roundPagerAdapter.notifyDataSetChanged();
                      viewPager.setAdapter(null);
                      viewPager.setAdapter(roundPagerAdapter);
                      viewPager.setCurrentItem(tab.getPosition());
                  } else {
                      viewPager.setCurrentItem(tab.getPosition());
                  }
              }
      
              @Override
              public void onTabUnselected(TabLayout.Tab tab) {
      
              }
      
              @Override
              public void onTabReselected(TabLayout.Tab tab) {
      
              }
          });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        • 2011-10-23
        • 1970-01-01
        • 1970-01-01
        • 2011-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多