在零索引处插入第一个项目时,notifyItemInserted()不起作用

时间:2017-03-30 10:13:04

标签: android android-recyclerview insert-update

我试图在第一个位置的回收者视图中插入一个项目,即0索引如下

 try {
       commentList.add(new Comment(
          Preferences.getProfileImageUrl(),
             "",                                       
               Preferences.getUserName(DONApplication.getInstance()),
               String.valueOf(Preferences.getUserId(DONApplication.getInstance())),
               response.getString("comment_id"),
               commentText
       ));
       commentAdapter.notifyItemInserted(commentList.size() - 1);                                      
     } catch (Exception e) {
         e.printStackTrace();                    
       }

但它根本没有显示,但是当我关闭窗口并再次打开它时它会变得可见。我不知道为什么会这样。有人能帮助我吗?

1 个答案:

答案 0 :(得分:9)

经过几个小时 - 这就是我发现的。 项目0已添加到列表中,屏幕已显示之前为0-9的项目,现在显示项目1-10。

您需要以编程方式滚动到位置0才能看到新添加的项目。

我用过

public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    this.recyclerView = recyclerView;
    super.onAttachedToRecyclerView(recyclerView);
} 

获取附加到适配器的 recyclerView 的引用(在我的情况下,我知道只有一个可能的recyclelerView,javadoc声明可能有多个)

在位置0添加项目后,我检查了第一个可见项目是否为0(如果用户已经向下滚动,我不想滚动)

private void restoreScrollPositionAfterAdAdded() {
    LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
    if (layoutManager != null) {
        int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();

        if (firstVisibleItemPosition == 0){
            layoutManager.scrollToPosition(0);
        }
    }
}