【发布时间】:2021-03-19 13:16:45
【问题描述】:
我正在为一位朋友构建一个小型销售点应用程序。她需要一个平板电脑上的应用程序,它有 40 个添加按钮(和 40 个删除按钮)。每个按钮代表一个产品并具有不同的标签。 屏幕左侧应该有 20 个堆叠的垂直按钮,右侧也应该有 20 个堆叠的垂直按钮。所有按钮都应适合一个屏幕。
我尝试使用两个相邻的 recyclerviews - 固定到屏幕大小 - 每个 recyclerview 内具有相同的适配器和自定义视图,但这导致了很多延迟,并且我在模拟器中收到了帧被跳过的警告。我认为这是因为 recyclerview 中的大量视图(80 多个按钮)。
然后我在 1 条水平线上尝试了 1 个 recyclerview 和两个产品,但这似乎并没有提高性能并且使我的应用程序变得复杂(因为我需要每行设置两个产品)。 我也尝试过使用 ListView,因为我认为它的开销较小,但总是出现延迟和“I/Choreographer:跳过 44 帧!应用程序可能在其主线程上做了太多工作。”
似乎没有跳过任何帧的唯一方法是对 80 个按钮进行硬编码,但这不是最佳解决方案,因为产品的数量会随着时间而变化。当产品更改(保存在 csv 中)时,按钮的数量也应该更新,而无需更改代码。
有没有一种方法可以创建一个对系统要求不高的具有 80 个按钮的视图?理想情况下,我会在 1 个视图中输入 1 个产品列表。
1 个产品的示例:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingHorizontal="10dip"
android:paddingTop="1dp"
android:paddingBottom="4dp">
<Button
android:id="@+id/add_button"
android:layout_width="200dp"
android:layout_height="44dp"
android:minHeight="1dip"
android:text="BUT L"
android:textSize="22sp" />
<TextView
android:id="@+id/amount"
android:layout_width="80dp"
android:layout_height="44dp"
android:paddingHorizontal="20dip"
android:layout_gravity="center"
android:textAlignment="center"
android:text="0"
android:textSize="22sp" />
<Button
android:id="@+id/delete_button"
android:layout_width="60dp"
android:layout_height="44dp"
android:minWidth="1dip"
android:minHeight="1dip"
android:text="-"
android:textSize="22sp" />
</LinearLayout>
【问题讨论】:
-
你试过用可点击的标签代替按钮吗?也许绘制按钮的强度较低。发布一小段代码来重现该问题也将有所帮助,因为这将使其更容易重现,并且您更有可能更快地获得答案