我PagerSlidingTabStrip
在我的项目中使用,并在片段中显示数据.它是一个很棒的图书馆.每个片段都包含一个学者的讲座,这些讲座是从Web服务加载的.访问Web服务的代码是onCreateView
Fragment的方法.目前,所有片段的数据在添加时同时加载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(); }
}
这也行不通.没有加载数据,就好像根本没有触发此事件一样.
我怎么做?我只想在用户点击标签时加载片段.
提前致谢
您可以覆盖setUserVisibleHint
片段的事件,以了解它是否对用户可见,然后加载您的数据.如下所示:
boolean _areLecturesLoaded = false; @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser && !_areLecturesLoaded ) { loadLectures(); _areLecturesLoaded = true; } }