我经常遇到这些类型的问题,但没有一个答案解决了我的问题。
我正在开发移动购物应用程序模型。我的自定义ListView
包含ImageView
,EditText
(数量),2 Buttons
用于增加和减少数量,3 TextView
s用于商品名称和其他两个价格和我通过Java代码根据需求动态加载NetWeights的许多按钮,我使用扩展BaseAdapter
和getView()的CustomAdapter(类)实现它。
问题1:
当我使用条件if(convertView==null), setTag(holder)
和getTag()
时,动态加载的按钮会重复并且数量会翻倍。
问题2:
在滚动自定义ListView
时,我在TextView
中的2个上丢失了我的数据,而另一个TextView
(名称)正常,因为在TextView
我不知道#39; t在运行时更改数据。在另外两个TextView
s(价格)上,我使用ButtonClicks(增加和减少)更改运行时的数据,当我滚动两个TextView
时,它会丢失其内容。实际上我对EditText(显示数量)有同样的问题,我通过获取值并将其传递到数组并再次设置它,使用TextWatcher
解决了它。我使用相同的技术(即)TextWatcher
来TextView
但这确实有帮助。我还尝试删除TextWatcher并使用数组设置文本并添加TextWatcher
。我仍然在那些TextView
s
任何建议??????
答案 0 :(得分:0)
问题1: 在使用ViewHolder(setTag(),getTag())时,我们将重用视图。 例如:假设我们有10个listview项目,屏幕一次可以显示3个项目。让我们说我们添加2个按钮来列出项目1.第一次加载列表视图时,我们将看到两个按钮。让我们说现在我们向下滚动并再次回到列表项1,因为我们正在重用视图,我们已经有2个按钮,如果我们有代码使用getTag()添加按钮,那么将添加2个按钮。我认为这可能导致按钮重复的问题。要添加更多信息,列表项1,列表项4,列表项7和列表项10将全部使用相同的视图,因为此示例中的屏幕只能显示3个项目。
问题2: 一种想法是将所有这些文本值存储在arrayList中。 例如,假设我们在每个列表项中都有一个textView,可以递增/递减。在此textView上设置textWatcher,每当文本更改时,使用“position”作为索引将其添加到arrrayList。当你执行getTag()时,在getView方法内部尝试使用以前存储的文本(存储在arrayList中)来设置textView。