首页 > 解决方案 > 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 扩展了这个类。

标签: androidandroid-recyclerview

解决方案


推荐阅读