android - SmoothScrollToPosition() 在 RecyclerView 中间歇性工作
问题描述
我的一项活动中有一个评论部分。用户可以发表评论。注释根据需要转到RecyclerView
(索引 0)的顶部。我正在调用smoothScrollToPosition(0)
. RecyclerView
这只能间歇性地工作。它的工作原理是,在评论帖子之前已经滚动了 recylerview。然后它滚动到索引 0...新评论。但是,如果在index 0
发布评论之前显示该项目,则 smoothScrollToPosition 不起作用。当我手动滚动时,注释在索引 0 处符合预期。有什么建议吗?
编辑
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);
ButterKnife.bind(this);
mCommnetsAdapter = new CommentsAdapter(commentsQuery) {
@Override
public void onDataChanged() {
if (getItemCount() == 0) {
mRecycler.setVisibility(View.GONE);
//mEmptyView.setVisibility(View.VISIBLE);
} else {
mRecycler.setVisibility(View.VISIBLE);
//mEmptyView.setVisibility(View.GONE);
}
}
};
mRecycler.setLayoutManager(new LinearLayoutManager(this));
mRecycler.setAdapter(mCommnetsAdapter);
}
@Override
protected void onStart() {
super.onStart();
mCommnetsAdapter.startListening();
mMatchRegistration= mMatchRef.addSnapshotListener(this);
}
@Override
protected void onStop() {
super.onStop();
if (mMatchRegistration !=null){
mMatchRegistration.remove();
mMatchRegistration=null;
}
}
@Override
public void onRating(Rating rating) {
addRating(mMatchRef, rating)
.addOnSuccessListener(this, new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "Rating added");
// Hide keyboard and scroll to top
hideKeyboard();
mRecycler.smoothScrollToPosition(0);
});
}
我有一个实现 notifyItemChange() 的基本适配器类。
public abstract class FirestoreAdapter<VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH>
implements EventListener<QuerySnapshot> {
.....
public void stopListening() {
if (mRegistration != null) {
mRegistration.remove();
mRegistration = null;
}
mSnapshots.clear();
notifyDataSetChanged();
}
public void setQuery(Query query) {
// Stop listening
stopListening();
// Clear existinkodig data
mSnapshots.clear();
notifyDataSetChanged();
// Listen to new query
mQuery = query;
startListening();
}.....
我的 CommentsApter 扩展了这个类。
解决方案
推荐阅读
- c++ - 将 ascii 转换为 char
- c# - 通过 MyCouch 获取数据库名称更改
- c# - 图像未出现在 Winforms 用户控件设计器中
- ruby-on-rails - FactoryGirl 关联 ID 为 nil
- web - 新的 Gmail 用户界面是使用哪种前端编程语言构建的?
- java - Springboot嵌入式mongo测试
- neo4j - Neo4j - 查询分析器 - 了解一些事情
- spring - 在 Spring Data JPA 中加入多个表的查询
- python - 在 python 中使用 selenium 打开 Firefox
- java - 在 MainActivity 中未使用 getResources().openRawResource 时出错