如何解决 java.lang.IllegalArgumentException: Invalid target position 错误?

时间:2021-02-01 14:04:54

标签: android android-recyclerview

<块引用>

我有一个简单的消息布局,Evertime 任何人都可以在其中打开 Activity,然后回收站视图应始终显示位于屏幕底部的最新数据。

<块引用>

所以,我发现这段代码可以做到这一点:

 comment_recycler = (RecyclerView) findViewById(R.id.comment_recycler);
 comment_recycler.smoothScrollToPosition(comment_recycler.getAdapter().getItemCount() - 1);
<块引用>

但是,每次发生此错误时:

java.lang.IllegalArgumentException: Invalid target position
<块引用>

这是完整的代码:

  databaseReference1 = FirebaseDatabase.getInstance().getReference("Blogs").child("Comments");
    options = new FirebaseRecyclerOptions.Builder<CommentModel>()
            .setQuery(databaseReference1, CommentModel.class)
            .build();

    comment_recycler.setLayoutManager(new LinearLayoutManager(this));
    commentAdapter = new CommentAdapter(options, CommentsActivity.this);
    comment_recycler.setAdapter(commentAdapter);
    comment_recycler.smoothScrollToPosition(comment_recycler.getAdapter().getItemCount() - 1);
    commentAdapter.notifyDataSetChanged();

    @Override
protected void onStart() {
    super.onStart();
    commentAdapter.startListening();
}

@Override
protected void onStop() {
    super.onStop();
    commentAdapter.stopListening();
}
<块引用>

如何修复此错误。请指导。谢谢

2 个答案:

答案 0 :(得分:1)

我想数据是使用异步调用从远程获取的,因此初始 smoothScrollPosition 将是 -1,因为 comment_recycler.getAdapter().getItemCount() 将是 zero,直到数据被获取,请在获取数据并通知 recycler 后移动该行。

答案 1 :(得分:1)

在 recyclerview 数据完全加载时尝试 smoothScrollPosition 方法。

所以

comment_recycler.postDelayed(new Runnable() {
    @Override
    public void run() {
        comment_recycler.smoothScrollToPosition(comment_recycler.getAdapter().getItemCount() - 1);
    }
},500);

500 不是测量值,但在大多数情况下是有效的。