【发布时间】:2013-12-23 02:59:01
【问题描述】:
我有一个问题,过去 2 天我一直在努力解决。
我正在构建一个使用 ActionBar、ViewPager 和 FragmentPagerAdapter 的应用程序。 Activity、Fragments 和 FragmentPagerAdapter 的代码与 http://developer.android.com/reference/android/support/v4/view/ViewPager.html 上的 android 示例中所述的代码完全相同
我面临的问题是——假设我在 viewPager 中只有 2 个片段。在两者之间切换/滑动时,片段没有得到更新。 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 方法时,尝试更新文本视图时会触发 NullPointerException。启动方法的代码是:
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 因为每次我滑动到新片段时,加载片段需要几秒钟
此时,fragment 只包含一个 textview,以后会有动画,所以很重要:
1- 仅在选择片段时运行动画,而不是在选择它旁边的片段时运行动画(ViewPager 缓存和恢复片段的方式)。
2- 当片段不再被选中时停止动画以避免浪费设备资源。
是的,我已经检查了互联网上的所有可用内容,但似乎没有任何东西适合我。
非常感谢您的帮助!
【问题讨论】:
标签: android exception android-viewpager refresh fragment