使用 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>

假设包装 RecyclerViewLinearLayout 是您的父布局。只需添加这一行:

android:focusableInTouchMode="true"

这将防止对焦问题大多数情况,尤其是当 RecyclerView 放在 NestedScrollView

中时