微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RecyclerView 不在两端渲染卡片项目

如何解决RecyclerView 不在两端渲染卡片项目

我想使用 RecyclerView 水平显示用户卡片,但我遇到了如下图所示的问题。

Strange behaviour of recyclerview

卡片一开始没有出现,但是当我稍微滚动它时,卡片突然出现。看起来真的很奇怪。为什么不从一开始就渲染卡片? RecyclerView 的另一端也是同样的情况。

Strange behaviour of recyclerview

我怀疑是 clipChildrenclipToPadding。有没有办法解决这个问题,而不必将类别放在带有填充的 LinearLayout 之外?

HomeFragment.kt

class HomeFragment : Fragment() {
    private lateinit var binding: FragmentHomeBinding

    override fun onCreateView(
        inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
    ): View? {
        binding = FragmentHomeBinding.inflate(inflater,container,false)
        val view = binding.root

        setupCategories()
        setupProducts()
        return view
    }

    override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
        super.onViewCreated(view,savedInstanceState)
    }

    private fun setupCategories() {
        val dummy = arrayOf(
            Category(R.drawable.shoes_nike_black),Category(R.drawable.yellow_shirt),Category(R.drawable.hoodie_gray_big),Category(R.drawable.hoodie_pink),)
        val spacingInPixels = (Resources.getSystem().displayMetrics.density * 8).toInt()
        binding.includeContentMain.recyclerViewCategories.addItemdecoration(
            LinearSpacingItemdecoration(spacingInPixels)
        )
        binding.includeContentMain.recyclerViewCategories.adapter = CategoriesAdapter(dummy)
    }

    // other unrelated code...
}

content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false"
    android:clipToPadding="false"
    android:orientation="vertical"
    android:paddingLeft="25dp"
    android:paddingTop="15dp"
    android:paddingRight="30dp"
    android:paddingBottom="15dp"
    tools:showIn="@layout/fragment_home">

    <TextView
        android:id="@+id/textViewCategory"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="25dp"
        android:layout_marginBottom="12dp"
        android:text="Category"
        android:textSize="30dp" />

    <androidx.core.widget.nestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipChildren="false"
        android:clipToPadding="false"
        android:fillViewport="true">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerViewCategories"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:clipChildren="false"
            android:clipToPadding="false"
            android:nestedScrollingEnabled="false"
            android:orientation="horizontal"
            android:overScrollMode="always"
            app:layoutManager="androidx.recyclerview.widget.linearlayoutmanager"
            tools:itemCount="4"
            tools:listitem="@layout/item_card_category" />
    </androidx.core.widget.nestedScrollView>

    <TextView
        android:id="@+id/textView3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="25dp"
        android:layout_marginBottom="12dp"
        android:text="Top Selling"
        android:textSize="30dp" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerViewTopSelling"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:isScrollContainer="false"
        app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
        app:spanCount="2"
        tools:itemCount="6"
        tools:listitem="@layout/item_card_product">

    </androidx.recyclerview.widget.RecyclerView>

</LinearLayout>

item_card_category.xml

<?xml version="1.0" encoding="utf-8"?>

<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="150dp"
    android:layout_height="150dp"
    app:cardBackgroundColor="#F7BE30"
    app:cardCornerRadius="10dp">

        <ImageView
            android:id="@+id/imageViewCategory"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:adjustViewBounds="true"
            android:cropToPadding="false"
            android:padding="10dp"
            android:src="@drawable/bag"
            tools:src="@tools:sample/backgrounds/scenic" />

</androidx.cardview.widget.CardView>

解决方法

这行代码会有所帮助。对于 JAVAKOTLIN 使用:

recyclerViewCategories.getRecycledViewPool().setMaxRecycledViews(0,0);

*recyclerViewCategories = recyclerView

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?