如何仅在PagerSlidingTabStrip中单击其选项卡时加载片段数据

 胖肉肉520 发布于 2023-02-13 11:44

PagerSlidingTabStrip在我的项目中使用,并在片段中显示数据.它是一个很棒的图书馆.每个片段都包含一个学者的讲座,这些讲座是从Web服务加载的.访问Web服务的代码是onCreateViewFragment的方法.目前,所有片段的数据在添加时同时加载ViewPager.我想知道是否有任何方法只有当用户点击/滑动到特定选项卡时才加载Fragment的数据.不是一次一切.

当前代码非常标准,我从提供的示例[android解决方案]中获得了帮助.1

寻呼机适配器如下:

public class ScholarDetailPagerAdapter extends FragmentPagerAdapter {

    private final String[] TITLES = { "Scholar Info", "Lectures"};
    Scholar _scholar;

    public ScholarDetailPagerAdapter(FragmentManager fm, Scholar scholar) {
        super(fm);
        _scholar = scholar;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return TITLES[position];
    }

    @Override
    public Fragment getItem(int arg0) {
        if(arg0 == 0)
            return ScholarsInfoFragment.netInstance(_scholar.Name, _scholar.Information, _scholar.ThumbnailUrl);
        else
            return ScholarLecturesFragment.newInstance(_scholar.ScholarId);
    }

    @Override
    public int getCount() {
        return TITLES.length;
    }

}

它返回两个片段,信息和讲座.Lectures片段调用Web服务以获得学者的讲座.

活动代码是:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // set the Above View
    setContentView(R.layout.tabbed_view);
    Scholar scholar = getScholar(getIntent());      

    _tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
    _pager = (ViewPager) findViewById(R.id.pager);
    _adapter = new ScholarDetailPagerAdapter(getSupportFragmentManager(), scholar);

    _pager.setAdapter(_adapter);

    final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources()
            .getDisplayMetrics());
    _pager.setPageMargin(pageMargin);

    _tabs.setViewPager(_pager);
} 

我尝试添加_tabs.setOnPageChangeListener(this);并最终onPageSelected(int arg0)进入我的活动.我觉得现在很容易.然后我public Fragment getItem(int arg0)ScholarDetailPagerAdapter上面修改并返回null而不是返回两个片段.但这引发了一个例外.我以为它会在寻呼机中呈现空视图..但当然我错了.

为了确保Fragment在单击其相应选项卡并且可见时加载数据,我还尝试覆盖其以下事件并在其中编写数据加载调用:

    onResume()没工作.在活动中添加时仍会加载数据

    试图重写onHiddenChanged

    @Override   
    public void onHiddenChanged(boolean hidden) {
    
        super.onHiddenChanged(hidden);
    
        if(!hidden){
            loadLectures();
        }
    

    }

这也行不通.没有加载数据,就好像根本没有触发此事件一样.

我怎么做?我只想在用户点击标签时加载片段.

提前致谢

1 个回答
  • 您可以覆盖setUserVisibleHint片段的事件,以了解它是否对用户可见,然后加载您的数据.如下所示:

    boolean _areLecturesLoaded = false;
    
    @Override
     public void setUserVisibleHint(boolean isVisibleToUser) {
         super.setUserVisibleHint(isVisibleToUser);
         if (isVisibleToUser && !_areLecturesLoaded ) {
          loadLectures(); 
          _areLecturesLoaded = true;
         }
     }
    

    2023-02-13 11:47 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有