【发布时间】:2012-09-10 06:15:43
【问题描述】:
在我的Fragments 之一中,我有一个从父Activity 调用的方法。该方法没有什么特别之处,它只是将我的ListView 滚动到一个位置。
public void scrollToSomething() {
mListView.smoothScrollToPosition(The position I supply);
}
当我最初调用此方法时,它的工作方式与我预期的一样,但是当我旋转我的设备并再次调用它时,我会从我的ListView 中抛出一个NullPointerException。我非常迷茫为什么会这样。我试过打电话给setRetainInstance(true)。在调用该方法之前,我尝试检查我的ListView 是否为空,如果是,则再次对其进行初始化,但这也不起作用。我尝试以几种不同的方式更改我的onCreateView,认为那里可能出了点问题。
onCreateView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
/* The View for the fragment's UI */
final ViewGroup mRootView = (ViewGroup)inflater.inflate(R.layout.fragment_list_base,
container, false);
/* Initialize our ListView */
mListView = (ListView)mRootView.findViewById(R.id.fragment_list_base);
return mRootView;
}
Fragment 使用简单的FragmentStatePagerAdapter 附加到ViewPager。我已经尝试仔细查看我的Fragment 和父Activity 的onDestroy 方法,看看我是否调用了可能导致错误的东西,但没有什么突出的。我不确定我遇到的是某种错误,还是我只是忽略了某些东西。任何帮助或建议都会是巨大的。我不完全确定还要添加什么,因为我只是很迷茫为什么会这样,但如果有人有问题,我会发布你认为合适的任何代码。
【问题讨论】:
-
根据你的标题,问题可能只是当你改变方向时活动“重置”“:Android app resets on orientation change和Android: handling runtime changes
-
听起来scrollToSomething() 在你的片段有机会调用onCreateView() 之前就被调用了。也可能是您的活动持有对旧片段的引用。究竟在生命周期中何时调用 scrollToSomething() 方法,顺便说一句?
-
@paulsm4 试过了,不行。不过这是个好主意。我认为它可能会起作用。
-
@Krylez
scrollToSomething仅在我使用onClickListener触摸特定LinearLayout时被调用。无论方向如何,我的ListView中的数据都会显示出来,这似乎只是给我带来问题的特定方法。 -
如果LinearLayout和ListView都在Fragment中,尝试在Fragment创建中添加监听。这样你的参考就不应该为空(著名的遗言)。
标签: java android android-fragments