我PagerSlidingTabStrip
在我的项目中使用并以片段的形式显示数据。它是一个很棒的图书馆,效果很好。每个片段都包含从 Web 服务加载的学者讲座。访问 Web 服务的代码onCreateView
在 Fragment 的方法中。目前所有片段的数据在添加到ViewPager
. 我想知道是否有任何方式仅在用户单击/滑动到特定选项卡时才加载片段的数据。不是一次所有的事情。
当前代码非常标准,我从提供的示例 [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;
}
}
它返回两个片段,信息和讲座。讲座片段调用网络服务来获取学者的讲座。
活动代码为:
@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(); }
}
这也没有用。没有加载数据,就好像根本没有触发此事件一样。
我怎么做?我只是想在用户单击选项卡时加载一个片段。
提前致谢