我有一个问题已经困扰我两天了。
我正在构建一个应用程序,使用ActionBar、ViewPager和FragmentPagerAdapter。Activity、Fragments和FragmentPagerAdapter的代码与Android示例中http://developer.android.com/reference/android/support/v4/view/ViewPager.html上的代码完全相同。
我面临的问题是——假设在viewPager中只有两个片段。当在两个片段之间切换/滑动时,片段不会更新。onResume不会被调用,因为viewPager会缓存当前片段左右各1个片段。
我尝试使用onTabSelected来检测选择的片段,然后通过接口从该片段启动一个方法(以下是代码)。
public void onTabSelected(Tab tab, FragmentTransaction ft) {
TabInfo tag = (TabInfo)tab.getTag();
for (int i=0; i<mTabs.size(); i++) {
if (mTabs.get(i) == tag) {
mViewPager.setCurrentItem(i);
}
}
((IStartStop)getItem(tab.getPosition())).Start();
}
然而,当使用Start方法时,在尝试更新TextView时会引发NullPointerException。 start方法的代码如下:
public void Start() {
TextView tv = _view.findViewById(R.id.text);
tv.setText("test");
}
异常抛出位置在:
TextView tv = _view.findViewById(R.id.text);
IStartStop 接口非常简单:
public interface IStartStop {
public void Start();
public void Stop();
}
我不想使用notifyDataSetChanged()和POSITION_NONE,因为每次我滑动到一个新的片段时,加载片段需要几秒钟的时间。
此时,片段只包括一个文本视图,在未来它们将具有动画,因此很重要:
1- 仅在选择片段时运行动画,而不是在选择旁边的片段时运行动画(ViewPager缓存并恢复片段的方式)。
2- 当片段不再被选中时停止动画,以避免浪费设备资源。
是的,我已经检查了互联网上所有可用的信息,但似乎都不能解决我的问题。
非常感谢您的帮助!