【问题标题】:Android - Reverse listview as message displayAndroid - 反向列表视图作为消息显示
【发布时间】:2013-05-01 12:25:26
【问题描述】:

我有一个关于我的 Android 应用程序的小问题。 我搜索了很长时间,但没有找到我的问题。

场景:我必须显示一个revert listview(作为 Facebook Messenger)。 当用户滚动到顶部时,加载更多消息。

问题notifiyDataAsChanged() 调用后,滚动不一样了! 我想保存与加载前完全相同的位置。

我试过那个代码:

// save index and top position
int index = list.getFirstVisiblePosition()+result.size();
View v = list.getChildAt(index);
int top = (v == null) ? 0 : v.getTop();

// ...
// restore
list.setSelectionFromTop(index, top);

但滚动条在加载后并不完全相同

你有想法吗?

【问题讨论】:

    标签: android listview reverse


    【解决方案1】:

    我认为您应该考虑在列表视图中使用 TranscriptModeStackFromBottom

    android:stackFromBottom="true"
    android:transcriptMode="normal"
    

    通过将转录模式设置为正常,只有当最后一个项目已经在视图中时,它才会滚动到底部。这样,当您调用 notifydatasetchanged 时,您的用户可以不间断地查看之前的列表视图项。

    【讨论】:

    • 感谢您的帮助。我不明白你的帖子。如果我在第 32 项上,在 notifydatasetchanged 之后,我想再次在第 32 项上!但是现在,调用这个方法的时候,我不在这个项目上……
    • 这个答案具有误导性。 stackFromBottom 将对象移动(堆叠)到底部,它不会创建相反的顺序。对象仍然是从底部添加的,这不是@FlorianMacLanglade 所要求的(我也在寻找相同的解决方案)。
    • @Diolor 是对的。 stackfromBottom 只是您想要的一部分。另一部分是这里回答的相反顺序:stackoverflow.com/questions/10941317/…
    • Collections.reverse(item);这会有帮助吗?它只是反转您的列表集合,因此在列表顶部显示最后一项。
    【解决方案2】:

    这样做:

    Collections.reverse(YourList); // ADD THIS LINE TO REVERSE ORDER!
    YourList.notifyDataSetChanged;
    

    【讨论】:

      【解决方案3】:

      我通过使用与您包含的相同代码来解决此问题,但我在恢复位置之前通过添加到适配器的项目数更新索引变量。似乎可以解决问题。

      【讨论】:

        【解决方案4】:

        因为 Kotlin 更简单

         myList.reverse()
        

        【讨论】:

          猜你喜欢
          • 2020-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多