【问题标题】:Adding new item to the top of the RecyclerView将新项目添加到 RecyclerView 的顶部
【发布时间】:2016-12-15 11:47:02
【问题描述】:

我正在以编程方式将一个项目添加到 recyclerview 位置 0

public void addQuestion(Question question){
    this.questionList.add(0, question);
    notifyItemInserted(0);
}

这很好用,项目确实出现在顶部的列表中,但用户必须向上滚动才能看到新项目。

项目如何出现在顶部并且recyclerview自动向上滚动有什么技巧吗?

【问题讨论】:

    标签: android scroll android-recyclerview add


    【解决方案1】:

    如果我理解正确并且您的问题是您已经滚动到列表顶部,但是在插入时您必须再次滚动才能看到项目,您可以尝试我的方法来避免它。

    根据我的经验,插入后滚动的方法可行,但动画看起来不自然。

    如果你真的想保存动画,你可以尝试一种对我的项目有帮助的方法:使用多类型回收器。在适配器中的 0 位置显示第二类的附加项目。这个项目可以只是一个带有小填充、标题(如果需要)甚至是一个空视图的视图。然后,notifyItemInserted(1) 你会得到漂亮的插入动画。

    注意:这种方法可能会增加您的项目的复杂性,并且需要有关多类型回收器视图的知识。

    【讨论】:

    • 在适配器中以 1dp 高度在 0 位置添加第二类的附加项帮助我解决了 IllegalArgumentException:在未分离的子项上调用附加:viewholder。
    【解决方案2】:

    你可以使用mRecyclerView.smoothScrollToPosition(int position)

    示例:

    public void addQuestion(Question question){
        this.questionList.add(0, question);
        notifyItemInserted(0);
        mRecyclerView.smoothScrollToPosition(0);
    }
    

    更新:

    如果你想让滚动到某个项目真的很流畅,你可以看看这个问题的答案

    RecyclerView - How to smooth scroll to top of item on a certain position?

    【讨论】:

    • 它不像 notifyItemInserted 那样流畅,但它是处理它的最佳方法!谢谢
    • smoothScrollToPosition(0) 如果项目的数量超过了目前列表所能显示的数量(这就是我所经历的),就会滞后。我只是用scrollToPosition(0)代替,它在“平滑度”上没有区别
    【解决方案3】:

    试试这个

    mRecyclerView.smoothScrollToPosition(0);
    

    【讨论】:

    • Jemo 答案的精确副本:D
    • 好像我们俩同时发帖
    • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
    【解决方案4】:

    是的,你可以这样做

    mRecyclerView.smoothScrollToPosition(0);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      相关资源
      最近更新 更多