我在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();
}
});
}
活性
<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"/>
答案 0 :(得分:1)
这种情况正在发生,因为RecyclerView
中的各种项目都有不同的尺寸(即高度)。
滚动条的大小和位置取决于RecyclerView
当前显示的内容以及屏幕上方和下方当前显示的项目数。 RecyclerView
猜测所有项目的高度大致相同,并相应地绘制滚动条。
想象一下,你的RecyclerView
现在正在显示一个非常高的项目,并且它上面有一个非常短的项目,下面有五个非常短的项目。就视图而言,所有项目都是相同的大小,因此滚动条只会是屏幕下方的1/6 - 2/6 ...直到您将那些非常短的项目滚动到视图中。