【问题标题】:Why does my ListView become null after an orientation change in my Fragment?为什么我的片段中的方向更改后我的 ListView 变为空?
【发布时间】: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 和父ActivityonDestroy 方法,看看我是否调用了可能导致错误的东西,但没有什么突出的。我不确定我遇到的是某种错误,还是我只是忽略了某些东西。任何帮助或建议都会是巨大的。我不完全确定还要添加什么,因为我只是很迷茫为什么会这样,但如果有人有问题,我会发布你认为合适的任何代码。

【问题讨论】:

  • 根据你的标题,问题可能只是当你改变方向时活动“重置”“:Android app resets on orientation changeAndroid: handling runtime changes
  • 听起来scrollToSomething() 在你的片段有机会调用onCreateView() 之前就被调用了。也可能是您的活动持有对旧片段的引用。究竟在生命周期中何时调用 scrollToSomething() 方法,顺便说一句?
  • @paulsm4 试过了,不行。不过这是个好主意。我认为它可能会起作用。
  • @Krylez scrollToSomething 仅在我使用onClickListener 触摸特定LinearLayout 时被调用。无论方向如何,我的ListView 中的数据都会显示出来,这似乎只是给我带来问题的特定方法。
  • 如果LinearLayout和ListView都在Fragment中,尝试在Fragment创建中添加监听。这样你的参考就不应该为空(著名的遗言)。

标签: java android android-fragments


【解决方案1】:

这可能对你有帮助

如果您的android:targetSdkVersion="12" 或更少:

android:configChanges="orientation|keyboardHidden">

如果您的android:targetSdkVersion="13" 或更多:

android:configChanges="orientation|keyboardHidden|screensize">

【讨论】:

  • 实际上,这成功了。如果可以的话,您介意简要解释一下为什么我的ListView 会变为空吗?
  • 这取决于您的代码在列表视图中填充数据的方式。无论如何,它现在工作正常吗?
  • 它似乎只有在我将screenSize 添加到configChangesAdapter 中的一些Views 我附加到我的ListView 时才有效方向改变,但就特定方法 scrollToSomething 而言,它的工作原理应该如此。
  • 因为你是 android:targetSdkVersion="13" 或更高版本。这就是为什么你的 android:configChanges="orientation|keyboardHidden|screensize" 是这样的
  • 是的,这就是我添加screenSize的原因。
猜你喜欢
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多