使用 picasso 禁用 recyclerview 自动滚动
disable recyclerview autoscroll with picasso
在我的片段中,我有一些带有文本的布局,在该布局下方是 recyclerview
。适配器中项目的布局是单个 imageView,我在其中使用 picasso 从 REST API 下载图像。
问题是当图像加载时屏幕自动滚动到 recyclerview
中的第一个项目,所以我的文本布局不可见,奇怪的是它只滚动到第一个项目,而不是每个项目。
换句话说:你打开片段 -> 你看到带有文本的布局 -> 当图像加载屏幕滚动到第一张图像和布局现在在上面的某个地方,直到你手动滚动到它才可见。
我怎样才能摆脱这个烦人的自动滚动?
我还有一个加载更多图片的按钮,如果你按下它recycler
图片加载后不会滚动
这是我加载图片的方式:
override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, p1: Int) {
Picasso.get().load(array_news[p1].image).into(target(viewHolder))
//Picasso.get().load(array_news[p1].image).into(viewHolder.itemView.news_item_image)
}
private fun target(viewHolder: RecyclerView.ViewHolder) = object: Target {
override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {
if (bitmap != null) {
val bmp = Bitmap.createScaledBitmap(bitmap, 400, 400, true)
viewHolder.itemView.news_item_image.setImageBitmap(bmp)
}
}
override fun onPrepareLoad(placeHolderDrawable: Drawable?) {}
override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) {}
}
加载图像后,您的 recyclerview 就会获得焦点。相反,当 activity 打开时,上面的文本视图应该首先获得焦点,而不是 recyclerview。
这与 Picasso 或图像加载无关。
转到您的布局并为您的 textView 添加 android:focusable = "true"。
如果这没有帮助,请在 activity 的 onCreate 中调用 text_view.requestFocus()。
文本视图将获得焦点并且屏幕不会向下滚动到回收视图。
你可以试试这个:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusableInTouchMode="true"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
假设包装 RecyclerView
的 LinearLayout
是您的父布局。只需添加这一行:
android:focusableInTouchMode="true"
这将防止对焦问题大多数情况,尤其是当 RecyclerView
放在 NestedScrollView
中时
在我的片段中,我有一些带有文本的布局,在该布局下方是 recyclerview
。适配器中项目的布局是单个 imageView,我在其中使用 picasso 从 REST API 下载图像。
问题是当图像加载时屏幕自动滚动到 recyclerview
中的第一个项目,所以我的文本布局不可见,奇怪的是它只滚动到第一个项目,而不是每个项目。
换句话说:你打开片段 -> 你看到带有文本的布局 -> 当图像加载屏幕滚动到第一张图像和布局现在在上面的某个地方,直到你手动滚动到它才可见。
我怎样才能摆脱这个烦人的自动滚动?
我还有一个加载更多图片的按钮,如果你按下它recycler
图片加载后不会滚动
这是我加载图片的方式:
override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, p1: Int) {
Picasso.get().load(array_news[p1].image).into(target(viewHolder))
//Picasso.get().load(array_news[p1].image).into(viewHolder.itemView.news_item_image)
}
private fun target(viewHolder: RecyclerView.ViewHolder) = object: Target {
override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {
if (bitmap != null) {
val bmp = Bitmap.createScaledBitmap(bitmap, 400, 400, true)
viewHolder.itemView.news_item_image.setImageBitmap(bmp)
}
}
override fun onPrepareLoad(placeHolderDrawable: Drawable?) {}
override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) {}
}
加载图像后,您的 recyclerview 就会获得焦点。相反,当 activity 打开时,上面的文本视图应该首先获得焦点,而不是 recyclerview。 这与 Picasso 或图像加载无关。
转到您的布局并为您的 textView 添加 android:focusable = "true"。 如果这没有帮助,请在 activity 的 onCreate 中调用 text_view.requestFocus()。 文本视图将获得焦点并且屏幕不会向下滚动到回收视图。
你可以试试这个:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusableInTouchMode="true"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
假设包装 RecyclerView
的 LinearLayout
是您的父布局。只需添加这一行:
android:focusableInTouchMode="true"
这将防止对焦问题大多数情况,尤其是当 RecyclerView
放在 NestedScrollView