java - recyclerview滚动条卡顿

标签 java android android-recyclerview

我在 this video 中演示了这个问题, 这是为什么? setHasFixedSize 没有解决问题,setHasStableIds 也没有解决问题,另外,我更改了滚动条样式以便可以正确看到它,但默认样式也会出现问题。

这是我的代码:

适配器

    @Override
public void onBindViewHolder(final HadithViewHolder holder, int position) {
    final Hadith currentHadith = ahadith.get(position);
    final Context context = holder.itemView.getContext();
    /*number*/
    holder.numTextView.setText(Utils.ARABIC_NUMBER_FORMAT.format(position + 1));

        /*text*/
    final String text = currentHadith.text();
    holder.hadithTextView.setText(text);

    /*buttons*/
    holder.moreBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            PopupMenu popup = new PopupMenu(context, holder.moreBtn);
            MenuInflater inflater = popup.getMenuInflater();
            inflater.inflate(R.menu.menu_hadith_options, popup.getMenu());

            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()) {
                        case R.id.copy_item:
                            UTILS.copyHadith(context, currentHadith);
                            break;

                        case R.id.share_item:
                            UTILS.shareHadith(context, currentHadith);
                            break;

                        case R.id.lookup_item:
                            UTILS.webSearch(context, currentHadith);
                            break;

                        case R.id.save_item:
                            DBS_MANAGER.saveHadith(currentHadith);
                            Snackbar.make(((ResultsActivity) context).findViewById(R.id.recycler_view),
                                    R.string.removed_notification,
                                    Snackbar.LENGTH_SHORT).show();
                            break;
                    }
                    return true;
                }
            });
            popup.show();

        }
    });
}

Activity

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                             android:id="@+id/main_content"
                                             android:layout_width="match_parent"
                                             android:layout_height="match_parent"
>


<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar"/>

</android.support.design.widget.AppBarLayout>

<include
    android:id="@+id/recycler_view"
    layout="@layout/recycler_view"/></android.support.design.widget.CoordinatorLayout>
<小时/>

recyclerview.xml

    <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/saved_recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="false"
    android:paddingLeft="5dp"
    android:paddingRight="5dp"
    android:paddingTop="3dp"
    android:scrollbars="vertical"
    android:fadeScrollbars="true"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

最佳答案

发生这种情况是因为 RecyclerView 中的各个项目具有不同的尺寸(即高度)。

滚动条的大小和位置取决于 RecyclerView 当前显示的内容以及当前显示内容上方和下方的屏幕外项目数。 RecyclerView 猜测所有项目的高度大致相同,并相应地绘制滚动条。

想象一下,您的 RecyclerView 现在显示一个非常非常高的项目,上面有一个非常短的项目,下面有五个非常短的项目。据 View 所知,所有项目的大小都相同,因此滚动条只会是屏幕下方的 1/6 - 2/6...直到您将那些非常短的项目滚动到 View 中。

关于java - recyclerview滚动条卡顿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45133912/

相关文章:

java - Spring 和 Abstract 类 - 在抽象类中注入(inject)属性

android - 将 SSL 证书添加到 keystore

android - 如何在 RecyclerView 中的最后一个元素之后创建一个空白空间?

android - RecyclerView.Adapter中哪里清除CompositeDisposable

android - Cards Stack RecyclerView - Android 库

java - 从表面 View 录制视频(绑定(bind)视频和相机预览)

java - 如何使用 Java Stream 将 List<Src> 映射到对象 Tgt?

java - 当你在java中调用pack()时,有没有办法阻止JFrame调整大小?

android - 在 android 上使用 ContactsContract api 从联系人获取邮政地址

android - Fragment onStop() 与 onDetach()、onDestroy() 或 onDestroyView() 相同吗?