gpt4 book ai didi

java - recyclerview滚动条卡顿

转载 作者:行者123 更新时间:2023-12-02 12:36:06 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com