gpt4 book ai didi

java - Android - 适配器数据更改后,滚动到 ListFragment 中 ListView 中的位置

转载 作者:行者123 更新时间:2023-11-29 21:40:30 25 4
gpt4 key购买 nike

我正在使用 ListFragment使用自定义适配器,用于膨胀 View 。数据通过 AsyncTaskLoader 加载创建 fragment 后。

我现在的问题是我想滚动(不是平滑滚动)到某个位置以显示最后选择的元素,即当我选择一个元素时 fragment 被销毁并且我想在列表中显示一次相同的位置 fragment 再次显示。

因此创建 View 并且一切正常,但我不知道在哪里添加 getListView().setSelection(x)行滚动到某个位置。我试图在清除元素并将其添加到 Loader<?>.onLoadFinished() 中的适配器后调用它功能,但这不起作用,我得到以下异常:

java.lang.IllegalStateException: Content view not yet created
at android.support.v4.app.ListFragment.ensureList(ListFragment.java:328)
at android.support.v4.app.ListFragment.getListView(ListFragment.java:222)
at fs.pokemon.effect.PokemonFragment.updateData(PokemonFragment.java:239)
at fs.pokemon.effect.PokemonFragment$2.onLoadFinished(PokemonFragment.java:129)
...

我的问题是:当 ListView 完成更新其内容时,是否有函数/回调让我收到通知?或者我还可以如何在内容加载后将 View 滚动到某个位置?

最佳答案

感谢 pskink 的评论,我再次尝试并注意到异常没有发生在 setSelection() 中,而是发生在 getListView() 中 - 我虽然我的加载器会重新加载创建 View 后的数据,但它使用缓存的结果,因此实际上在 fragment View 初始化完成之前调用了 onLoadFinished(),从而导致异常。

正确的做法是在onLoadFinished()中判断位置,然后覆盖 fragment onViewCreated(),执行getListView().setSelection (curPosition) 那里。

可能还有加载程序清除其缓存的情况,并且 onLoadFinished() 将在必须考虑的 onViewCreated() 方法之后调用,但到目前为止工作正常。

关于java - Android - 适配器数据更改后,滚动到 ListFragment 中 ListView 中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17258114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com