等到 recyclerview 滚动到位置

Cha*_*kar 3 android android-recyclerview

我正在使用 recyclerview,我必须在 recyclerview 中选择最后一项。

我首先滚动到 recyclerview,然后对所选项目调用 performClick() 方法。

这是代码。

int latestPostIndex = reactionsListAdapter.getItemCount() - 1;
rvReactionsList.scrollToPosition(latestPostIndex);
rvReactionsList.getChildAt(latestPostIndex).performClick();
Run Code Online (Sandbox Code Playgroud)

latestPostIndex 已正确填充。问题是在滚动完成之前调用 performClick,因此应用程序崩溃。

如何让 performClick() 等到 scrollToPosition() 完成?

Kei*_*ati 6

您可以将 a 分配RecyclerView.OnScrollListener给您RecyclerView并收听onScrollStateChanged等待滚动完成:

int latestPostIndex = reactionsListAdapter.getItemCount() - 1;
rvReactionsList.scrollToPosition(latestPostIndex);
rvReactionsList.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
        if(newState == RecyclerView.SCROLL_STATE_IDLE 
            && linearLayoutManager.findLastVisibleItemPosition() == latestPostIndex)
            linearLayoutManager.findViewByPosition(latestPostIndex).performClick();

    }
});
Run Code Online (Sandbox Code Playgroud)

PS:不要忘记替换 rvReactionsList.getChildAt(latestPostIndex)linearLayoutManager.findViewByPosition(latestPostIndex)asgetChildAt不返回RecyclerView..