使用毕加索禁用recyclerview自动滚动

时间:2018-10-24 13:02:58

标签: android android-recyclerview 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?) {}
}

2 个答案:

答案 0 :(得分:0)

加载图像后,您的recyclerview便会聚焦。取而代之的是,在打开活动时,上方的文本视图应首先获得焦点,而不是recyclerview。 这与毕加索或图像加载无关。

转到您的布局,然后为您的textView添加android:focusable =“ true”。 如果这样做没有帮助,请在您的活动的onCreate中调用text_view.requestFocus()。 比文本视图更受关注,并且屏幕不会向下滚动到recyclerview。

答案 1 :(得分:0)

您可以尝试以下方法:

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

假设包裹LinearLayout的{​​{1}}是您的父级布局。只需添加以下行:

RecyclerView

这将防止在大多数情况下出现焦点问题,尤其是将android:focusableInTouchMode="true" 放在RecyclerView

中时