自从我改变了我的应用程序以从Room
数据库加载数据后,我在RecyclerView
上遇到了一些奇怪的问题。
我有一个屏幕(一个Fragment
),用于显示用户的个人资料。基本上,它是一个GridLayout
,第一项(行)显示用户的一些信息,然后对于每一行,我都显示三张图片。
RecyclerView
的代码如下:
private void initializeRecyclerView() {
if (listAdapter == null) {
listAdapter = new PhotosListAdapter(getActivity(), userProfileAccountId, false);
}
rvPhotosList.setNestedScrollingEnabled(true);
rvPhotosList.getItemAnimator().setChangeDuration(0);
GridLayoutManager layoutManager = new GridLayoutManager(getContext(), ProfileFragment.GRID_COLUMNS,
LinearLayoutManager.VERTICAL, false);
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
// 3 spans for Header, 1 for photos
return listAdapter.isHeader(position) ? 3 : 1;
}
});
rvPhotosList.setLayoutManager(layoutManager);
int spacingInPixels = 1dp;
rvPhotosList.addItemDecoration(new PaddingItemDecoration(GRID_COLUMNS, spacingInPixels, true));
rvPhotosList.setAdapter(listAdapter);
}
这就是我如何加载数据:
compositeDisposable.add(
repository.getAccount(accountId)
.doOnNext(account -> {
if (account != null && view != null) {
view.showCover(account.getCover());
view.showAccount(account);
}
})
.flatMap(s -> repository.getUserPosts(accountId))
.subscribe(posts -> {
if (view != null) {
view.showPosts(posts);
}
}, throwable -> {}));
两个调用都返回一个Flowable,其中一个是Flowable<Account>,另一个是Flowable<Post>,其中Account和Post是Room的实体类。
两个方法showAccount()和showPosts()将之前提到的实体类传递给适配器。问题是:数据加载完成后,它会滚动到屏幕底部(也是RecyclerView底部)。
我不确定为什么会发生这种情况。是因为Room的Flowable类型吗?因为以前当我从网络获取数据并将它们传递给适配器时,我没有遇到这个问题。
编辑:我正在使用版本25.3.1的RecyclerView。
编辑2:这是我如何使用Account和Post数据更新我的适配器类的:
public void addPhotos(List<Post> posts) {
dataset.addAll(posts);
notifyDataSetChanged();
}
public void addProfileItem(Account account) {
this.account = account;
notifyItemInserted(0);
}